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

Python操作MySQL:如何正确使用字符串参数?代码执行报错求助

解决MySQL Connector表名字符串参数的语法错误

你的问题出在mysql.connector的参数化机制不支持替换表名这类SQL标识符——cur.execute()的%s占位符仅用于处理SQL语句中的值(比如WHERE条件里的数值/字符串),不能用来替换表名、列名。直接用它替换表名会被驱动解析成带引号的字符串,导致SQL语法错误。

修正后的代码

import mysql.connector as mc
con = mc.connect(user='root', host='localhost', password='something', database='something')
cur = con.cursor()

def getItem(ID, course):
    # 先校验course的合法性,防止SQL注入
    allowed_course_suffixes = ['Entree', 'Dessert', 'Drink']  # 根据你的实际表结构调整
    if course not in allowed_course_suffixes:
        raise ValueError("Invalid course type")
    
    # 安全拼接表名
    table_name = f"Menu{course}"
    # ID用参数化占位符,表名直接拼入SQL
    cur.execute(f"SELECT Item FROM {table_name} WHERE ID = %s", (ID,))
    return cur.fetchone()

关键要点

  • 表名不能参数化:SQL标识符(表名、列名)无法通过execute()的参数替换,必须直接拼入语句。但必须通过白名单校验course参数,避免恶意输入引发SQL注入。
  • 值必须参数化:WHERE子句中的ID一定要用%s占位符,将值作为参数传入,这是安全处理用户输入的标准方式。
  • 冗余语法清理:原代码中ID = (%s)的括号无意义,移除后更符合SQL规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:09