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

Python使用pymysql插入数据时SQL语句format格式化失效如何解决

问题诱因

  • format方法调用位置错误:你将.format(name2)写在了双引号包裹的SQL字符串内部,Python会将其识别为普通字符串内容,不会触发字符串格式化逻辑
  • 语法逻辑漏洞:就算修正了format的位置,现有写法也没有给字符串类型的id字段值加单引号包裹,格式化后生成的SQL会被数据库误认为id值是字段名,直接抛出语法错误
  • 存在安全风险:直接拼接字符串生成SQL的写法存在SQL注入漏洞,恶意构造的name2值可以直接篡改、删除数据库全表数据

解决方法

优先使用数据库驱动自带的参数化查询方案,既可以自动处理字符串转义、引号包裹逻辑,又能避免SQL注入风险:

if difficulty == 1:
    cursor = tetris.cursor()
    name2 = chr(name[0]) + chr(name[1]) + chr(name[2])
    # 不同数据库的参数占位符略有差异,%s适配MySQL、PostgreSQL,?适配SQLite,可根据自己的数据库类型调整
    sql = "INSERT INTO Normal (id, score) VALUES (%s, %s)"
    # 执行时将参数按顺序放在元组中传入第二个参数
    cursor.execute(sql, (name2, 404))
    tetris.commit()  
    cursor.close()

如果仅需要修正你原有format写法的错误(不推荐生产环境使用,仅作语法参考),写法调整如下:

# format放在字符串外侧,字符串值用单引号包裹
sql = "INSERT INTO Normal (id, score) VALUES ('{}', 404)".format(name2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:15:07