同步操作将从 华北电力大学-iDeal/Python_RESTfulAPI_Codegen 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env python# -*- coding:utf-8 -*-# file:checkSqlLink.py# author:Itsuka# datetime:2021年9月16日 12:20# software: PyCharm"""检验数据库连接是否成功并返回所有表、字段信息(前端用)"""from sqlalchemy import create_engine, MetaDatafrom sqlalchemy.engine import reflectionfrom utils.checkTable import CheckTablefrom urllib import parsedef check_sql_link(dialect, username, password, host, port, database) -> dict:"""返回所有表、字段信息(前端用):param dialect: 数据库种类:param username: 用户名:param password: 密码:param host: 数据库IP:param port: 数据库端口号:param database: 要连接的数据库:return code: 布尔型,True表示连接成功,False表示连接失败:return message: 返回信息:return error: 错误信息:return data: 所有表的信息及字段:return invalid: 检查不通过的表,以列表返还表名"""try:driver_dict = {'mysql': 'pymysql','mssql': 'pymssql','oracle': 'cx_oracle','postgresql': 'psycopg2'}password = parse.quote_plus(password)url = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(dialect, driver_dict[dialect], username, password, host,port, database)engine = create_engine(url)metadata = MetaData(engine)insp = reflection.Inspector.from_engine(engine)metadata.reflect(engine, views=True)except Exception as e:return {'code': False, 'message': str(e), 'error': str(e)}table_dict, invalid_tables = CheckTable.main(metadata, insp.get_view_names())data = {'table': [],'view': []}for table in table_dict.values():if table['is_view']:# 是一个视图filter_field = []for column in table['columns']:column['ischecked'] = Falsefilter_field.append(column)data['view'].append({'view': table['table_name'],'filter_field': filter_field,'ischecked': False})else:# 是一个基本表filed = []business_key_type = ''for column in table['columns'].values():if table.get('business_key') and column['name'] == table['primaryKey'][0]:# 唯一主键不是递增时,需要记录该主键的数据类型business_key_type = column['type']if column['name'] in table['primaryKey']:# 剔除出主键continueelse:filed.append({'field_name': column['name'],'field_type': column['type'],'field_encrypt': False})data['table'].append({'table': str(table['table_name']),'businesskeyname': table['business_key'].get('column') if table['business_key'].get('column') else '','businesskeyrule': '','logicaldeletemark': '','field': filed,'businesskeyuneditable': True if table['business_key'].get('column') or len(table['primaryKey']) > 1 else False,"businesskeytype": business_key_type,'issave': False})return {'code': True, 'message': '成功', 'data': data, 'invalid': invalid_tables}def connection_check(dialect, username, password, host, port, database) -> dict:"""检验数据库连接是否成功:param dialect: 数据库种类:param username: 用户名:param password: 密码:param host: 数据库IP:param port: 数据库端口号:param database: 要连接的数据库:return code: 布尔型,True表示连接成功,False表示连接失败:return message: 返回信息:return error: 错误信息"""try:driver_dict = {'mysql': 'pymysql','mssql': 'pymssql','oracle': 'cx_oracle','postgresql': 'psycopg2'}url = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(dialect, driver_dict[dialect], username, password, host,port, database)engine = create_engine(url)metadata = MetaData(engine)metadata.reflect(engine)return {'code': True, 'message': '数据库连接成功', 'data': ''}except Exception as e:return {'code': False, 'message': '数据库连接失败', 'error': str(e)}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。