DeepSeek使用案例--编写SQL

对于开发人员,时常需要编写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为输入参数调用接口,获得查询结果。注意使用只读权限的账户。

使用自然语言查询数据案例,请参考:

Dify开发平台实战-优快云博客

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyzcto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值