python - 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”没有处理它?
解决方案
它与特殊字符无关。你犯了和你之前很多人一样的错误;与旧式字符串格式化不同%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)
推荐阅读
- python - 使用 pytest 测试模块执行
- ruby-on-rails - 我无法在 rails 6.0.3 中使用 gem 'ar-octopus'
- applescript - 如何使用 AppleScript 在邮件应用程序中选择来自发件人的邮件?
- r - fread:na.strings 中的空字符串 ("") 不会被解释为 NA
- python - Python循环函数仅在Dataframe中的行中满足条件时提取第一列名称
- opengl - 使用 Alpha 混合进行深度测试
- laravel - 在每个刀片中包含导航栏和页脚的正确方法 - Laravel 7?
- angular - 向生产模式添加新更改后清除 Angular 缓存
- kubernetes - 如何在使用 PVC 时管理 pod 副本
- javascript - 在 Firebase 数据库引用后 Node.js 控制台挂起