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

时间:2016-09-26 00:45:29

标签: python mysql

我在将数据传递到%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()

2 个答案:

答案 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))