开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 17

不胜舟/Python_RESTfulAPI_Codegen

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
release
分支 (4)
标签 (8)
release
master
dev
feature-views
v2.1.2
v2.1.1
v2.1.0
v2.0.0
v2.0.1
v1.0.0
v0.1.1
v0.1.0
release
分支 (4)
标签 (8)
release
master
dev
feature-views
v2.1.2
v2.1.1
v2.1.0
v2.0.0
v2.0.1
v1.0.0
v0.1.1
v0.1.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
release
分支 (4)
标签 (8)
release
master
dev
feature-views
v2.1.2
v2.1.1
v2.1.0
v2.0.0
v2.0.1
v1.0.0
v0.1.1
v0.1.0
Python_RESTfulAPI_Codegen
/
utils
/
tablesMetadata.py
Python_RESTfulAPI_Codegen
/
utils
/
tablesMetadata.py
tablesMetadata.py 6.42 KB
一键复制 编辑 原始数据 按行查看 历史
Nathan 提交于 2022年01月06日 20:00 +08:00 . bug修复
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# file:tablesMetadata.py.py
# author:Nathan
# datetime:2021年8月26日 14:56
# software: PyCharm
"""
Get metadata of all tables
"""
import json
class TableMetadata(object):
with open('config/default_table_config.json', 'r', encoding='utf-8') as f:
DEFAULT_CONFIG = f.read()
with open('config/datatype_map.json', 'r', encoding='utf-8') as f:
TYPE_MAPPING = json.load(f)
@classmethod
def get_tables_metadata(cls, metadata, reflection_views, table_config=DEFAULT_CONFIG) -> dict:
"""
获取数据库数据
:param metadata: sqlalchemy元数据
:param reflection_views: 需要反射的视图名称列表
:param table_config: 表配置
"""
table_config = table_config if isinstance(table_config, dict) else json.loads(table_config)
# Get all tables object
table_objs = metadata.tables.values()
table_dict = {}
# Traverse each table object to get corresponding attributes to form an attribute dictionary
for table in table_objs:
table_name = str(table)
table_dict[table_name] = {}
table_dict[table_name]['table_name'] = table_name
# 如果该表是一个视图
if table_name in reflection_views:
table_dict[table_name]['is_view'] = True
table_dict[table_name]['filter_field'] = []
# 遍历所有的视图配置
for view in table_config['view']:
if table_name == view['view']:
# 遍历配置中的字段
for field in view['filter_field']:
# 如果字段被勾选,则将字段名称和类型添加进字典中
if field['ischecked']:
table_dict[table_name]['filter_field'].append({
"field_name": field['field_name'],
"field_type": field['field_type']
})
table_dict[table_name]['columns'] = []
for column in table.columns.values():
temp_column_dict = {
"field_name": str(column.name),
}
for type_ in cls.TYPE_MAPPING:
if str(metadata.bind.url).split('+')[0] != type_['database']:
continue
for python_type, sql_type_list in type_['data_map'].items():
if str(column.type).lower() in sql_type_list:
temp_column_dict['field_type'] = python_type
break
temp_column_dict.setdefault('field_type', 'str')
table_dict[table_name]['columns'].append(temp_column_dict)
continue
table_dict[table_name]['is_view'] = False
table_dict[table_name]['logical_delete_mark'] = ""
table_dict[table_name]['business_key'] = {}
# Check if the business key exists and check record deletion method
for config in table_config['table']:
if config['table'] == table_name and config['logicaldeletemark'] != '':
table_dict[table_name]['logical_delete_mark'] = config['logicaldeletemark']
if config['table'] == table_name and config['businesskeyname'] != '':
table_dict[table_name]['business_key']['column'] = config['businesskeyname']
table_dict[table_name]['business_key']['rule'] = config['businesskeyrule']
# 需要RSA加密的字段
table_dict[table_name]['rsa_columns'] = []
for rsa_table in table_config['table']:
if rsa_table['table'] == table_name:
for rsa_colume in rsa_table['field']:
if rsa_colume['field_encrypt']:
table_dict[table_name]['rsa_columns'].append(rsa_colume['field_name'])
from sqlalchemy.engine import reflection
insp = reflection.Inspector.from_engine(metadata.bind)
# 初始化为空列表
table_dict[table_name]['primaryKey'] = insp.get_pk_constraint(table_name)['constrained_columns']
table_dict[table_name]['columns'] = {}
# Traverse each columns to get corresponding attributes
for column in table.columns.values():
table_dict[table_name]['columns'][str(column.name)] = {}
table_dict[table_name]['columns'][str(column.name)]['name'] = str(column.name)
for type_ in cls.TYPE_MAPPING:
if str(metadata.bind.url).split('+')[0] != type_['database']:
continue
for python_type, sql_type_list in type_['data_map'].items():
if str(column.type).lower() in sql_type_list:
table_dict[table_name]['columns'][str(column.name)]['type'] = python_type
break
table_dict[table_name]['columns'][str(column.name)].setdefault('type', 'str')
# 是否自动递增
table_dict[table_name]['columns'][str(column.name)][
'is_autoincrement'] = True if column.autoincrement is True else False
# 存在复合主键
if len(table_dict[table_name]['primaryKey']) > 1:
table_dict[table_name]['business_key'] = {}
else:
# 如果主键不是自增的,则将业务主键设置为主键
if str(column.name) in table_dict[table_name]['primaryKey'] and not \
table_dict[table_name]['columns'][str(column.name)]['is_autoincrement']:
table_dict[table_name]['business_key']['column'] = str(column.name)
# 是否可以为空
table_dict[table_name]['columns'][str(column.name)]['nullable'] = column.nullable
# 是否存在默认值
table_dict[table_name]['columns'][str(column.name)][
'is_exist_default'] = True if column.server_default is not None else False
return table_dict
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

Python接口项目代码自动化生成项目
暂无标签
Apache-2.0
使用 Apache-2.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/resonate/Python_RESTfulAPI_Codegen.git
git@gitee.com:resonate/Python_RESTfulAPI_Codegen.git
resonate
Python_RESTfulAPI_Codegen
Python_RESTfulAPI_Codegen
release
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /