如何使用Python向MySQL插入含逗号的完整句子至单列?代码报错求助
解决Python插入含逗号文本到MySQL的语法错误问题
你的问题根源在于直接使用字符串格式化拼接SQL语句——当文本里包含单引号、逗号这类特殊字符时,会直接打乱SQL语句的语法结构(这就是你触发报错的原因),而且这种写法还存在极高的SQL注入风险。
正确方案:使用参数化查询
Python的MySQLdb驱动原生支持参数化查询,通过占位符%s替代直接拼接变量,驱动会自动处理特殊字符的转义,完美解决你的问题。
修正后的代码如下:
# 用%s作为占位符,参数统一放在execute的第二个元组参数中 cursor.execute( """INSERT INTO company( company_name, company_information, company_location, company_phone_number, comp_web_site, photo ) VALUES (%s, %s, %s, %s, %s, %s)""", (company_name, company_information, company_location, phone_number, web_site, image) ) # 务必提交事务(如果你的数据库连接没有设置自动提交) conn.commit()
额外说明:关于NOW()的处理
你原来的代码错误地把'NOW()'当作参数传入了,但NOW()是MySQL的内置函数,不需要用字符串包裹,直接写在SQL语句里即可。如果需要插入当前时间,可以给表新增一个时间字段(比如created_at),然后修改SQL:
cursor.execute( """INSERT INTO company( company_name, company_information, company_location, company_phone_number, comp_web_site, photo, created_at ) VALUES (%s, %s, %s, %s, %s, %s, NOW())""", (company_name, company_information, company_location, phone_number, web_site, image) )
参数化查询的优势
- 自动转义特殊字符(逗号、单引号等),保证SQL语句语法始终正确;
- 彻底规避SQL注入攻击,这是字符串拼接写法的致命安全漏洞。
内容的提问来源于stack exchange,提问作者Belas
相关产品推荐
相关产品推荐

