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

shawnwu/Python_RESTfulAPI_Codegen

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (4)
标签 (15)
master
release
dev
dev_update_ui
v2.4.3
v2.4.2
v2.4.1
v2.4
v2.3.1
v2.3.0
v2.2.0
v2.1.2
v2.1.1
v2.1.0
v2.0.0
v2.0.1
v1.0.0
v0.1.1
v0.1.0
master
分支 (4)
标签 (15)
master
release
dev
dev_update_ui
v2.4.3
v2.4.2
v2.4.1
v2.4
v2.3.1
v2.3.0
v2.2.0
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': # 私人令牌
master
分支 (4)
标签 (15)
master
release
dev
dev_update_ui
v2.4.3
v2.4.2
v2.4.1
v2.4
v2.3.1
v2.3.0
v2.2.0
v2.1.2
v2.1.1
v2.1.0
v2.0.0
v2.0.1
v1.0.0
v0.1.1
v0.1.0
checkTable.py 7.93 KB
一键复制 编辑 原始数据 按行查看 历史
songlujie 提交于 2024年01月15日 20:36 +08:00 . 完善/next-table返回的信息
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# file:checkTable.py
# author:Itsuka
# datetime:2021年8月25日 9:53
# software: PyCharm
"""
检验表是否符合生成规则
"""
import keyword
from utils.loggings import loggings
from utils.tablesMetadata import TableMetadata
class CheckTable(object):
# check the Primary key
# 检查table主键
@classmethod
def check_primary_key(cls, table_dict, session_id, ip):
"""
根据代码生成模式,自动读取所有表或所需表,检验主键后返回合规的表列表
:return: 符合规范的表名列表,即有且仅有一个主键,没有符合规范的情况下返回None
"""
available_tables = []
invalid_tables = []
for table in table_dict.values():
if len(table['primary_key_columns']) == 0:
# 表中没有主键
invalid_tables.append(table['table_name'])
loggings.warning(1, 'table {0} do not have a primary key'.format(table['table_name']), session_id, ip)
elif len(table['primary_key_columns']) > 1:
# 表中有复数个主键
invalid_tables.append(table['table_name'])
loggings.warning(1, 'table {0} has multiple primary keys'.format(table['table_name']))
else:
available_tables.append(table['table_name'])
return available_tables, invalid_tables
@classmethod
def check_primary_key_update(cls, metadata, session_id, ip):
"""
根据代码生成模式,自动读取所有表或所需表,检验主键后返回合规的表列表
:return: 符合规范的表名列表,即有且仅有一个主键,没有符合规范的情况下返回None
"""
available_tables = []
invalid_tables = []
# 获取所有表的信息
all_tables = metadata.tables
# 遍历所有表并判断是否有主键
for table_name, table in all_tables.items():
if table.primary_key:
if len(table.primary_key) > 1:
invalid_tables.append(table_name)
loggings.warning(1, 'table {0} has multiple primary keys'.format(table_name))
# print(f"Table '{table_name}' has multiple primary keys: {table.primary_key}")
else:
available_tables.append(table_name)
# print(f"Table '{table_name}' has a primary key.")
else:
# 表中没有主键
invalid_tables.append(table_name)
loggings.warning(1, 'table {0} do not have a primary key'.format(table_name), session_id, ip)
# print(f"Table '{table_name}' does not have a primary key.")
return available_tables, invalid_tables
# check keywords of python in tables
# 检查表名和字段名,是否和Python的关键字冲突
@classmethod
def check_keyword_conflict_update(cls, metadata, session_id, ip):
"""
check whether the table name or column name is a keyword of python
:return: True while no table name is a keyword, else return False
"""
available_tables = []
invalid_tables = []
# 获取所有表的信息
all_tables = metadata.tables
# 遍历所有表并判断是否有主键
for table_name, table in all_tables.items():
flag = True
# 检查表名是否为python关键字
if keyword.iskeyword(table_name.lower()):
loggings.warning(1, 'table "{0}" is a keyword of python'.format(table_name), session_id,ip)
flag = False
# 检查字段名
for column in table.columns:
if keyword.iskeyword(column.name.lower()):
loggings.warning(1, 'column "{0}.{1}" is a keyword of python'.format(table_name,column),session_id,ip)
# print(f"Column name '{column.name}' in table '{table_name}' conflicts with a Python keyword.")
flag = False
if flag:
available_tables.append(table_name)
else:
invalid_tables.append(table_name)
return available_tables, invalid_tables
# check keywords of python in tables
# 检查表名和字段名,是否和Python的关键字冲突
@classmethod
def check_keyword_conflict(cls, table_dict, session_id, ip):
"""
check whether the table name or column name is a keyword of python
:return: True while no table name is a keyword, else return False
"""
available_table = []
invalid_table = []
for table in table_dict.values():
flag = True
# 检查表名是否为python关键字
if keyword.iskeyword(table['table_name']):
loggings.warning(1, 'table "{0}" is a keyword of python'.format(table['table_name']), session_id, ip)
flag = False
for column in table['columns'].values():
# 检查表字段是否为python关键字
if keyword.iskeyword(column['name']):
loggings.warning(1, 'column "{0}.{1}" is a keyword of python'.format(table['table_name'],
column['name']), session_id,
ip)
flag = False
if flag:
available_table.append(table['table_name'])
else:
invalid_table.append(table['table_name'])
return available_table, invalid_table
# 入口函数定义
@classmethod
def main(cls, metadata, session_id, ip, reflection_views,view=False, inspector=None,engine=None):
"""
建立数据库连接时对表进行检查,筛去没有唯一自增主键、表名/字段名与Python关键字有冲突的表
:param metadata: 数据库元数据
:param view: 是否为视图
"""
if view:
transformed_dict = TableMetadata.get_views_metadata_update(metadata, reflection_views,inspector)
return transformed_dict
else:
transformed_dict = TableMetadata.get_tables_metadata_update(metadata, reflection_views,engine)
invalid_tables = {}
# check table primary key
# available_table, invalid_table = cls.check_primary_key_update(metadata, session_id, ip)
available_table, invalid_table = cls.check_primary_key(transformed_dict, session_id, ip)
invalid_tables['primary_key'] = invalid_table
for invalid in invalid_table:
transformed_dict.pop(invalid)
# check the keyword
# available_table, invalid_table = cls.check_keyword_conflict_update(metadata, session_id, ip)
available_table, invalid_table = cls.check_keyword_conflict(transformed_dict, session_id, ip)
available_tables = available_table
invalid_tables['keyword'] = invalid_table
for invalid in invalid_table:
transformed_dict.pop(invalid)
if len(invalid_tables) > 0:
loggings.warning(
1,
"A total of {0} tables check passed."
"The following {1} tables do not meet the specifications and cannot be generated: {2}."
.format(
len(available_tables),
len(invalid_tables['primary_key'] + invalid_tables['keyword']),
",".join(invalid_tables['primary_key'] + invalid_tables['keyword'])
),
session_id,
ip
)
# # 反射数据库中的所有表
# metadata.reflect()
return transformed_dict, invalid_tables
loggings.info(1, "All table checks passed, a total of {0} tables.".format(len(available_tables)), session_id,
ip)
return transformed_dict, invalid_tables
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

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

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

取消
提交

简介

一款Python flask接口项目代码生成器,能基于已有数据库设计,生成restful风格的全站基本接口(API)代码;生成的接口项目代码,针对二次开发人员能做到开箱即用;目标接口项目中包含接口安全,访问限流等机制,以及需要的单元测试模块代码; 生成的目标项目能支持Docker方式单独以服务方式部署;
取消

发行版

暂无发行版

贡献者

全部

近期动态

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

搜索帮助

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

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