首页 > 解决方案 > MySQL中的特殊字符导致错误

问题描述

下图显示了一个代码片段:

            query="insert into mytable values ('%s','%s','%s','%s',%s,'%s')"
            value=(str(cr),str(cs),str(srv),str(cl),recipe["total_time"],image,name)
            print(name)
            cursor.execute(query%value)
            mydb.commit()

我添加了一个 print(name) 语句来显示“name”变量到底是什么。(它是一个字符串)。在运行时,我收到一个错误: 在此处输入图像描述

“paneer ki sabji | ..”是名称的值。我将“name”中的数据插入到 mysql 表中,在“nvarchar”类型的列下。

错误是因为特殊字符“|”吗?如果是,我们如何修复它,为什么“nvarchar”没有处理它?

标签: pythonmysqlstring

解决方案


它与特殊字符无关。你犯了和你之前很多人一样的错误;与旧式字符串格式化不同%s不要使用字符串格式将参数插入查询- 这对 SQL 注入开放。不幸的是,DB API 也指定为有效:https ://www.python.org/dev/peps/pep-0249/#paramstyle 。另请参阅MySQL 参数化查询%s

现在还有一个问题:

query="insert into mytable values ('%s','%s','%s','%s',%s,'%s')"

数数%s。有 6 个。现在数:

(str(cr),str(cs),str(srv),str(cl),recipe["total_time"],image,name)

这是一个包含 7 个值的元组。那么你如何期望它与 6 个占位符一起工作呢?如果recipes是,pd.Series那么您会遇到更多问题,但希望不是。

我猜的答案:

query="INSERT INTO mytable VALUES ('%s', '%s', '%s', '%s', '%s, '%s', '%s')"
value=(str(cr), str(cs), str(srv), str(cl), recipe["total_time"], image, name)
cursor.execute(query, value)

推荐阅读