You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python pymysql的查询语句中插入数据库名?

解决pymysql中动态插入数据库名的语法错误问题

问题出在你误用了cursor.execute的参数化功能——这个功能是用来处理SQL查询中的值参数(比如WHERE id = %s里的具体数值),它会自动给字符串参数加上单引号,导致生成的SQL变成'my_database'.table_a,这不符合MySQL对数据库名的语法要求(数据库名应该用反引号包裹,或者无特殊字符时直接写)。

正确的实现方式

因为数据库名属于SQL的标识符(而非值),不能用execute的参数化来替换,需要用字符串格式化先拼接好SQL语句,再执行:

方法1:使用f-string(Python 3.6+)

cursor = connection.cursor()
db_name = "my_database"
query = f"""
    SELECT *
    FROM `{db_name}`.table_a
"""
result = cursor.execute(query)

方法2:使用str.format()

cursor = connection.cursor()
query = """
    SELECT *
    FROM `{}`.table_a
"""
result = cursor.execute(query.format("my_database"))

重要注意事项

如果数据库名来自用户输入或不可信来源,一定要做严格的合法性校验(比如只允许字母、数字、下划线),避免SQL注入风险——字符串格式化没有参数化的安全防护能力,直接拼接不可信内容会导致安全问题。

内容的提问来源于stack exchange,提问作者vojtam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:20:23