問題場景還原
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()方法后再試試,可能有奇效
