DeepSeek 本身不会因你提供数据库名称就获得 MySQL 访问权限。可以让它辅助写 SQL,再由本地 Python 使用获准的只读账号执行参数化查询。本例只读取指定地区的演示订单,并限制返回数量。
准备输入与运行环境
Python 3.11,安装 mysql-connector-python。前提是已有你有权访问的 MySQL 测试数据库,存在 orders 表,列为 order_id、region、amount_cents;创建演示数据应由数据库负责人完成。连接信息通过 DB_HOST、DB_USER、DB_PASSWORD、DB_NAME 环境变量提供,不写入提示词。

给 DeepSeek 的任务说明
请写 Python MySQL Connector 的只读 SELECT 示例。表 orders 有 order_id、region、amount_cents,只查指定 region 的前 20 条,按 order_id 排序。用 %s 参数绑定值,不拼接用户输入。凭证来自环境变量,连接失败应报告失败,不自动改表或重试写入。
在本地运行与检查
将下面代码保存为 example_16.py。进入保存该文件的目录,在终端执行 python example_16.py。代码应由你检查后执行,按实际字段修改。
import os
import mysql.connector
required = ["DB_HOST", "DB_USER", "DB_PASSWORD", "DB_NAME"]
if any(not os.environ.get(k) for k in required):
raise RuntimeError("先配置测试数据库环境变量")
connection = mysql.connector.connect(
host=os.environ["DB_HOST"], user=os.environ["DB_USER"],
password=os.environ["DB_PASSWORD"], database=os.environ["DB_NAME"],
connection_timeout=10)
cursor = None
try:
cursor = connection.cursor(dictionary=True)
region = "East"
cursor.execute(
"SELECT order_id, region, amount_cents FROM orders "
"WHERE region = %s ORDER BY order_id LIMIT 20", (region,))
rows = cursor.fetchall()
print("rows", len(rows))
for row in rows:
print(row)
finally:
if cursor is not None:
cursor.close()
connection.close()
值占位符与表名不是同一回事
%s 占位符绑定地区这样的值,不要给它加引号,也不要使用 f-string 拼接 region。表名与列名在本例固定,不能用同一个占位符绑定动态表名;需要动态结构时采用经过审核的白名单。参数绑定也不能代替数据库最小权限。
远程连接要补哪些条件
账号应只具有本例需要的 SELECT 权限,网络允许访问指定端口。生产连接的 TLS、证书验证和主机名核验必须按数据库管理员与连接器支持配置,本例未提供远程安全部署模板。不要把数据库端口开放给公网来解决连接失败。
有响应但没有记录怎么办
rows 0 不等于连接失败。先检查测试表中是否存在 East、大小写及筛选口径,使用获准的数据库客户端执行同条件查询比较。导出的查询结果经检查脱敏后才交给模型解释,AI 无需拿到数据库密码。
怎样确认结果正确
在自己获准的测试库先确认 East 的记录数,再运行示例;返回行数不超过 20,所有 region 都应符合查询条件,编号顺序一致。用数据库客户端执行相同 SELECT 对照。未配置环境变量时应明确失败;连接异常不应被报告为查询成功。
适用边界与常见问题
本文核对了连接器官方代码中的参数化 execute 接口,但没有连接真实 MySQL 服务,未对你的权限、TLS 或数据做实测。演示表结构是假设前提,实际列名、驱动版本、认证插件及网络配置需按你的测试环境调整。
资料依据
接口说明核验日期:2026 年 10 月 1 日。MySQL Connector 官方游标代码;MySQL Connector 官方接口定义。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30352.html