对于开发人员,时常需要编写SQL。这事交给大模型最合适。如何让DeepSeek编写出正确的SQL,首先需要提供数据库的表结构且有对应的注释。
一.环境准备
在能够连接数据库的机器上安装python和pip,并安装mysql.connector。
二. 让DeepSeek生成导出数据库表结构的文件。
提示词:
使用python编写一段脚本,连接mysql数据库,导出指定的多个数据库和对应的表结构以及注释,忽略指定的表,保存到文件。
import pymysql
from pymysql.constants import CLIENT
import sys
from datetime import datetime
# 配置数据库连接信息
DB_CONFIG = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'port': 3306,
'charset': 'utf8mb4',
'client_flag': CLIENT.MULTI_STATEMENTS,
}
# 需要导出的数据库配置(数据库名: 要忽略的表列表)
DATABASES_CONFIG = {
'db1name': ['table1', 'table2'], # 示例:导出db1name,忽略table1和table2
'db2name': ['table1'] # 示例:导出db2name,忽略table1
}
# 输出文件路径
OUTPUT_FILE = f"schema_backup_{datetime.now().strftime('%Y%m%d%H%M%S')}.txt"
def export_database_schema():
try:
# 建立数据库连接
connection = pymysql.connect(**DB_CONFIG)
cursor = connection.cursor()
with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
# 写入文件头信息
f.write(f"-- MySQL Schema Backup\n")
f.write(f"-- Generated at: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
f.write(f"-- Server Version: {connection.get_server_info()}\n\n")
for db_name, ignore_tables in DATABASES_CONFIG.items():
# 获取数据库所有表
cursor.execute("""
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = %s
AND TABLE_TYPE = 'BASE TABLE'
""", (db_name,))
tables = [row[0] for row in cursor.fetchall() if row[0] not in ignore_tables]
if not tables:
print(f"跳过空数据库: {db_name}")
continue
# 写入数据库注释
f.write(f"\n-- {'=' * 50}\n")
f.write(f"-- Database: `{db_name}`\n")
f.write(f"-- {'=' * 50}\n\n")
# 设置数据库上下文
cursor.execute(f"USE `{db_name}`;")
f.write(f"USE `{db_name}`;\n\n")
for table in tables:
# 获取表创建语句
cursor.execute(f"SHOW CREATE TABLE `{table}`")
create_stmt = cursor.fetchone()[1]
# 获取表注释
cursor.execute("""
SELECT TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = %s
AND TABLE_NAME = %s
""", (db_name, table))
table_comment = cursor.fetchone()[0]
# 写入表信息
f.write(f"-- {'-' * 50}\n")
f.write(f"-- Table: `{table}`\n")
if table_comment:
f.write(f"-- Comment: {table_comment}\n")
f.write(f"-- {'-' * 50}\n")
f.write(f"{create_stmt};\n\n")
print(f"导出成功!保存路径: {OUTPUT_FILE}")
except pymysql.Error as e:
print(f"数据库错误: {e}")
sys.exit(1)
except Exception as e:
print(f"发生错误: {e}")
sys.exit(1)
finally:
if 'connection' in locals() and connection.open:
cursor.close()
connection.close()
if __name__ == "__main__":
export_database_schema()
修改脚本中的数据库相关配置信息
-
DB_CONFIG:数据库连接参数 -
DATABASES_CONFIG:需要导出的数据库及要忽略的表(格式:{数据库名: [要忽略的表]})
执行脚本得到schema_backup_{时间戳}.txt
三. 使用提示词让大模型生成需要的SQL
将导出的数据库描述文件txt上传给DeepSeek大模型。使用合适的提示词,让大模型生成SQL。
提示词要尽量详尽描述你的意图。
四. 可能的扩展使用场景
结合Dify,创建工作流,让LLM生成SQL后,执行代码以SQL为输入参数调用接口,获得查询结果。注意使用只读权限的账户。
使用自然语言查询数据案例,请参考:
859

被折叠的 条评论
为什么被折叠?



