Python中如何正确编写执行UPDATE SQL更新查询语句
问题原因
你手动拼接生成的最终SQL语句为UPDATE users SET message = hello WHERE UserId=13,字符串值hello两侧缺少SQL语法要求的单引号包裹,数据库解析时会把无引号的hello识别为列名,因此触发"undefined column name 'hello'"报错。
注意:直接手动拼接SQL字符串除了容易出现语法错误,还存在SQL注入安全隐患,任何场景下都不推荐使用这种写法。
正确写法
所有遵循Python DB-API规范的数据库驱动(pymysql、mysql-connector、psycopg2、sqlite3等)都原生支持参数化查询,由驱动自动完成参数的引号包裹、特殊字符转义,从根源避免语法错误和注入风险。
根据你使用的数据库驱动对应占位符规则编写即可:
- MySQL、PostgreSQL 场景(驱动占位符为
%s)
msg = 'hello' # SQL语句中用占位符代替实际参数,参数以元组形式作为execute方法的第二个参数传入 cursor.execute('UPDATE users SET message = %s WHERE UserId = %s', (msg, 13)) # 注意更新操作需要提交事务才会实际生效 conn.commit()
- SQLite 场景(python自带sqlite3模块占位符为
?)
msg = 'hello' cursor.execute('UPDATE users SET message = ? WHERE UserId = ?', (msg, 13)) conn.commit()
不要尝试手动给拼接的字符串加单引号来修复问题,一旦参数内容包含单引号、转义字符或是恶意注入语句,依然会触发语法错误或数据安全问题。
内容的提问来源于stack exchange,提问作者aoiTenshi
相关产品推荐
相关产品推荐

