我需要在MySql db中插入一个包含双引号的值:
import MySQLdb
cursor = db.cursor()
sql_pattern = 'INSERT INTO Table(column1, column2, column3....) VALUES("{0}".....)'
data_object_array = get_data_object_array()
for item in data_object_array():
sql = sql_pattern.format(item["attr1"], item["attr2"]....)
cursor.execute(sql)
我有错误
_mysql_exceptions.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'data" fdsfds5454 "data2"")\' at line 1')
其中"data" fdsfds5454 "data2"
是包含item["attr1"]
如何摆脱它?
答案 0 :(得分:4)
请勿,不要,使用.format
进行SQL查询。使用内置的DB转义机制:
sql_pattern = 'INSERT INTO Table(column1, column2, column3...) VALUES(%s, %s.....)'
...
cursor.execute(sql_pattern, (item["attr1"], item["attr2"]...,))
.exectue
将使用正确的(安全!)字符串表示值替换每个%s,无论是字符串,整数,浮点数等。%s
中sql_patter
周围没有其他引号1}},因为.execute
将根据参数类型添加它们。