Python mysql.connector模块,将数据传递到字符串值%s

Python mysql.connector模块,将数据传递到字符串值%s,python,mysql,Python,Mysql,我无法将数据传递到%s令牌。我环顾四周,发现这个Mysql模块以不同的方式处理%s令牌,出于安全原因,应该对其进行转义,我的代码抛出了这个错误 mysql.connector.errors.ProgrammingError:1064(42000):您的数据库中有一个错误 SQL语法;查看与您的MySQL服务器版本对应的手册以了解更多信息 在第1行“%s”附近使用的正确语法 如果我这样做: sql_insert = ("INSERT INTO `Products` (title) VALUES(%

我无法将数据传递到%s令牌。我环顾四周,发现这个Mysql模块以不同的方式处理%s令牌,出于安全原因,应该对其进行转义,我的代码抛出了这个错误

mysql.connector.errors.ProgrammingError:1064(42000):您的数据库中有一个错误 SQL语法;查看与您的MySQL服务器版本对应的手册以了解更多信息 在第1行“%s”附近使用的正确语法

如果我这样做:

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()

Python字符串格式为:

str1 = 'hello'
str2 = 'world'
'%s, %s' % (str1, str2)
%
元组一起使用,而不是

对于您的特定情况,请尝试:

cursor.execute(sql_insert % (data))

Python字符串格式为:

str1 = 'hello'
str2 = 'world'
'%s, %s' % (str1, str2)
%
元组一起使用,而不是

对于您的特定情况,请尝试:

cursor.execute(sql_insert % (data))

不,不要按照@Jeon建议的方式来做——通过使用字符串格式,您将代码公开给它。相反,请正确参数化查询:


注意查询参数是如何放入元组的。

不,不要按照@Jeon建议的方式进行操作-使用字符串格式将代码公开。相反,请正确参数化查询:


请注意查询参数是如何放入元组的。

抱歉,必须进行向下投票,
这里是完全有效的-它是
execute()
参数之间的分隔符。
execute()
的第二个参数是查询参数。这不是Pythonic vs not的问题,而是将参数插入查询的正确方法和错误方法。感谢您的理解。抱歉,我必须进行下一票,
这里是完全有效的-它是
execute()
参数之间的分隔符。
execute()
的第二个参数是查询参数。这不是Pythonic vs not的问题,而是将参数插入查询的正确方法和错误方法。谢谢你的理解。谢谢你,这是我一直在寻找的答案,虽然@Jeon的解决方案会起作用,但这种方法最好是因为漏洞。谢谢你,这是我一直在寻找的答案,虽然@Jeon的解决方案会起作用,但这种方法最好是因为漏洞。