问题场景还原
mysql数据库中
在编写update sql后,想使用python进行数据库批量操作,此时必须以sql特定格式执行才可
如下面修改数据的sql模板
update user_info set packge='["xxx"]' where id = 'xxx'
此时使用sql进行操作数据库,以下为模版,
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","testpassword","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
id = [1]
update_sql = "update user_info set packge='%s' where id = %s" % (str(["xxx"]),id[0])
# 使用 execute() 方法执行 SQL
cursor.execute(update_sql)
# 使用 commit() 方法进行提交.
data = cursor.commit()
print ("Database version : %s " % data)
# 关闭数据库连接
db.close()
此时遇到报错,提示sql语法不支持,那就先把这段执行sql打印出来,如下图
可以发现字符串中的我想使用["xxx"],里面的双引号转成单引号了,这就很郁闷
解决办法
方式1:
在双引号前面加个转义符 \ ,即反斜杠,如
# -*- coding:utf-8 -*-
id = [1]
update_sql = "update user_info set packge='%s' where id = %s" % (str('[\"xxx\"]'),id[0])
print(update_sql)
执行结果:
方式2:
不要用str方法将列表转为字符串即可,如下
# -*- coding:utf-8 -*-
id = [1]
update_sql = "update user_info set packge='%s' where id = %s" % ('["xxx"]',id[0])
print(update_sql)
执行结果:
问题总结
在遇到字符串引号多层嵌套时,双层嵌套用字符串格式化即可,三层嵌套,字符串格式化+以上两种方法即可,如果出现数据效果不是你想要的,建议去掉str()方法后再试试,可能有奇效