我在将数据传递到%s令牌时遇到问题。我环顾四周,注意到这个Mysql模块以不同的方式处理%s令牌,并且出于安全原因它应该被转义,我的代码抛出了这个错误。
mysql.connector.errors.ProgrammingError:1064(42000):你的错误 SQL语法;查看与您的MySQL服务器版本对应的手册 正确的语法使用近'%s)'在第1行
如果我这样做:
sql_insert = ("INSERT INTO `Products` (title) VALUES(%s)"),(data)
我收到了一个元组错误..
import mysql.connector
from mysql.connector import errorcode
cnx = mysql.connector.connect (user='userDB1', password='UserPwd1',
host='somedatabase.com', database='mydatabase1')
cursor = cnx.cursor()
sql_insert = ("INSERT INTO `Products` (title) VALUES(%s)")
data=('HelloSQLWORLD')
cursor.execute(sql_insert,data)
cnx.commit()
cnx.close()
答案 0 :(得分:1)
不,不要像@Jeon建议的那样 - 通过使用字符串格式,您将代码暴露给SQL injection attacks。相反,正确地参数化查询:
query = """
INSERT INTO
Products
(title)
VALUES
(%s)"""
cursor.execute(query, ('HelloSQLWORLD', ))
请注意查询参数如何放入元组。
答案 1 :(得分:0)
Pythonic字符串格式为:
str1 = 'hello'
str2 = 'world'
'%s, %s' % (str1, str2)
将%
与tuple
一起使用,而不是,
针对您的具体情况,请尝试:
cursor.execute(sql_insert % (data))