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

Python MySQL SELECT语句执行报错求助:语法错误排查

问题原因与解决方案

你的问题出在MySQL参数化查询的占位符用途限制:%s只能用来替换SQL语句中的值,不能替换表名、列名这类数据库标识符。当你用%s替换表名时,驱动会自动给表名加上引号,导致SQL变成类似SELECT close FROM 'xxx_ivol' WHERE date = 'xxxx-xx-xx',而表名是不需要加引号的,这就触发了语法错误。

修正代码

d2 = df.iloc[-1,:]
q = symbol+'_ivol'

# 先通过字符串格式化处理表名(确保symbol是可信的,避免SQL注入)
query = f"""SELECT close FROM `{q}` WHERE date = %s"""
# 只把日期值作为参数传入
VALUES = (d2[1],)

cursor.execute(query, VALUES)
ivol = cursor.fetchall()
conn.close()

关键注意事项

  • 表名用反引号()包裹是为了避免表名和MySQL关键字冲突,比如如果表名是order`这类关键字,必须加反引号。
  • 用字符串拼接表名存在SQL注入风险,所以一定要确保symbol是你自己程序可控的(比如来自固定配置、白名单,而不是用户输入),如果是用户输入的内容,必须做严格的合法性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:15:39