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

Python操作MySQL:基于变量选字段遇AttributeError报错求助

问题解决:AttributeError: 'tuple' object has no attribute 'format'

错误原因

你当前代码里,("SELECT {book_categories} FROM research_papers WHERE book_Name = %s", (book,))是一个元组对象,而元组并没有.format()方法,直接在它上面调用该方法就会触发这个错误。

正确写法

需要先对SQL字符串单独完成字段替换,再将处理好的SQL语句和参数一起传给execute():

book_category = "science"
# 先替换SQL中的字段变量
sql = "SELECT {book_categories} FROM research_papers WHERE book_Name = %s".format(book_categories=book_category)
# 再执行查询,传入参数
mycursor_a.execute(sql, (book,))

关键注意事项

因为字段名无法通过MySQL的参数化查询来安全传递,直接用变量替换存在SQL注入风险。务必提前校验book_category的合法性,比如限制它只能是预定义的允许字段:

allowed_fields = ["science", "history", "literature"]
if book_category not in allowed_fields:
    raise ValueError("非法的字段名称")

# 校验通过后再执行查询
sql = "SELECT {book_categories} FROM research_papers WHERE book_Name = %s".format(book_categories=book_category)
mycursor_a.execute(sql, (book,))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:10:31