python操作数据库时,字符串拼接时,字符串嵌入单引号,引号多层嵌入问题记录

问题场景还原

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()方法后再试试,可能有奇效

posted @ 2021-09-27 23:36  happy-winds  阅读(942)  评论(0编辑  收藏  举报