继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

借助DeepSeek API实现SQL优化平台

马听老师
关注TA
已关注
手记 7
粉丝 101
获赞 69

这一节内容,来聊下通过调用DeepSeek 的API,来实现一个SQL优化平台。

效果图如下:

https://img1.sycdn.imooc.com/0bc0f46709d3ec8924971392.jpg


1 申请硅基流动的API

目前,DeepSeek官方的API,因为资源紧张,暂时不送额度,也不能充值了。我们就可以使用硅基流动的API key来使用DeepSeek模型。

当然,后续如果官方API key开放充值了,也可以参考这篇文章的方法。


进入到硅基流动的API密钥管理页面:https://cloud.siliconflow.cn/account/ak

https://img1.sycdn.imooc.com/4119276709d3ecc310720711.jpg


点击新建API密钥。就可以在页面查看到API密钥。

https://img1.sycdn.imooc.com/b742c46709d3ecd510800513.jpg



2 在代码中测试DeepSeek API

把硅基流动的API key 设置为环境变量。

Windows环境:

setx SILICONFLOW_API_KEY xxx

Linux环境:

export SILICONFLOW_API_KEY xxx


硅基流动的API支持用openai库进行调用,所以我们可以先安装OpenAI的Python库:

pip install --upgrade openai


在PyCharm中编写测试API key的代码:

from openai import OpenAI
import os
api_key = os.getenv('SILICONFLOW_API_KEY')
client = OpenAI(api_key=api_key, base_url="https://api.siliconflow.cn/v1")
response = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V3',
    messages=[
        {'role': 'user',
        'content': "2025年,对创业者来说,有哪些机遇?"}
    ],
    stream=True
)
for chunk in response:
    print(chunk.choices[0].delta.content, end='')

如下图,如果能正确返回结果,说明API key没问题。

https://img1.sycdn.imooc.com/4ac99f6709d3ed6211290861.jpg


3 通过DeepSeek生成SQL优化平台代码

进入到DeepSeek的官网:https://chat.deepseek.com/

发送如下提示词(记得勾选“深度思考”):

借助gradio实现一个页面,

有两个输入框

一个框输入表结构,另一个框输入SQL语句

然后替换以下代码中的content

一个输出框输出优化结果


from openai import OpenAI
import os
api_key = os.getenv('SILICONFLOW_API_KEY')
client = OpenAI(api_key=api_key, base_url="https://api.siliconflow.cn/v1")
response = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V3',
    messages=[
        {'role': 'user',
        'content': "2025年,对创业者来说,有哪些机遇?"}
    ],
    stream=True
)
for chunk in response:
    print(chunk.choices[0].delta.content, end='')


小编的会话截图如下:

https://img1.sycdn.imooc.com/2408896709d3ee3f11310756.jpg


生成的代码是:

from openai import OpenAI
import os
import gradio as gr
def optimize_sql(schema, sql):
    # 组合提示词
    prompt = f"""请优化以下SQL语句:
【表结构】
{schema}
【原始SQL】
{sql}
【优化建议】
"""
    # 创建OpenAI客户端
    client = OpenAI(
        api_key=os.getenv('SILICONFLOW_API_KEY'),
        base_url="https://api.siliconflow.cn/v1"
    )
    # 流式请求
    response = client.chat.completions.create(
        model='deepseek-ai/DeepSeek-V3',
        messages=[{'role': 'user', 'content': prompt}],
        stream=True
    )
    # 逐步收集并返回结果
    full_response = ""
    for chunk in response:
        content = chunk.choices[0].delta.content or ""
        full_response += content
        yield full_response
with gr.Blocks(title="SQL优化助手") as demo:
    gr.Markdown("## SQL优化助手")
    gr.Markdown("请输入表结构和需要优化的SQL语句")
    with gr.Row():
        with gr.Column():
            schema_input = gr.Textbox(
                label="表结构",
                placeholder="请输入表结构(例如:users(id INT, name VARCHAR(50), age INT))",
                lines=7
            )
            sql_input = gr.Textbox(
                label="SQL语句",
                placeholder="请输入需要优化的SQL语句",
                lines=7
            )
        output = gr.Textbox(
            label="优化结果",
            interactive=False,
            lines=12
        )
    gr.Examples(
        examples=[
            [
                "employees(id INT, name VARCHAR(100), department_id INT, salary DECIMAL(10,2))",
                "SELECT * FROM employees WHERE salary > 5000"
            ],
            [
                "orders(order_id INT, customer_id INT, order_date DATE, total_amount DECIMAL)",
                "SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id HAVING total_amount > 1000"
            ]
        ],
        inputs=[schema_input, sql_input]
    )
    submit_btn = gr.Button("开始优化", variant="primary")
    submit_btn.click(
        fn=optimize_sql,
        inputs=[schema_input, sql_input],
        outputs=output
    )
if __name__ == "__main__":
    demo.queue().launch()



4 运行代码

运行之后,会创建一个web服务。

https://img1.sycdn.imooc.com/125ef06709d3eea912840249.jpg

在网页直接访问:http://127.0.0.1:7860/

界面如下:

https://img1.sycdn.imooc.com/b5b9066709d3eec023861252.jpg


5 测试SQL优化效果

我们来测试SQL优化。

表结构:

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` varchar(20) DEFAULT NULL,
  `b` int(20) DEFAULT NULL,
  `c` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  
  PRIMARY KEY (`id`),
  KEY `idx_a` (`a`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;

故意构造一条隐式转换的SQL,看DeepSeek是否能优化。

select * from t1 where a=1000;


能发现存在的问题,以及给出合理的优化建议。

https://img1.sycdn.imooc.com/0bc0f46709d3ec8924971392.jpg

当然,SQL优化平台只是举个例子,比如其他一些类似的平台,包括SQL生成器,Json格式化平台,都不在话下。大家也可以尝试一下。


另外,大家如果想系统学习DBA,可以看下我制作的DBA体系课。

课程亮点如下:

  • 从基础到提升,包括DBA需要掌握的绝大多数内容;

  • 10多个企业级DBA项目;

  • 通过Go开发一套DB平台;

  • 3种主流高可用方案精讲;

  • 数据库上云后DBA的具体工作;

  • AI协助DBA高效管理数据库;

  • 答疑服务。


课程链接:https://class.imooc.com/sale/dba


https://img1.sycdn.imooc.com/65b741fe0001095e10800540.jpg



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP