MySQL / Python连接器无法搜索

时间:2018-11-26 12:25:22

标签: python mysql database

import mysql.connector

config = {
    'user': 'root',
    'password': '*******',
    'host': '127.0.0.1',
    'database': 'mydb',
    'raise_on_warnings': True
}

cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()

find_user = ("SELECT * FROM HM_Login WHERE Username = '%s' ")
data_Pupil = {
    'Username': "GJM"
}
cursor.execute(find_user, data_Pupil)

lit = cursor.fetchall()
print(lit)
cursor.close()
cnx.close()

我有一个正常工作的数据库,当我将%S插入数据库时​​,尝试搜索数据库并拉出一列的一行时遇到了问题,但现在只有在我有值的情况下它才能工作在查询中。这是将mysql连接器用于python。

mysql.connector.errors.ProgrammingError: 1064 (42000): 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 '' at line 1

我收到了这个错误,它非常有见地,如果您有什么办法可以帮助解决,那将毫无用处。

2 个答案:

答案 0 :(得分:0)

您的占位符语法用于位置参数,但是您使用了字典。将其替换为元组:

find_user = ("SELECT * FROM HM_Login WHERE Username = %s")
data_pupil = ('GJM',)
cursor.execute(find_user, data_Pupil)

答案 1 :(得分:0)

如错误说明所述。您有一个SQL错误。您正在尝试输入变量作为位置参数,但已在变量“位置”上使用了字典。

相反,您应该对变量和带有变量的元组使用%s,然后执行以下操作:

find_user = "SELECT * FROM HM_Login WHERE Username = %s"
data_Pupil = ('GJM',)
cursor.execute(find_user, data_Pupil)

也可以使用字典-但您不可以。尽管如此,我还是要在这里展示它,因为我必须深入解释以了解原因。

find_user = "SELECT * FROM HM_Login WHERE Username = '{Username}'".format(**data_Pupil)
data_Pupil = {
    'Username': "GJM"
    }

正如我在评论中告诉我的那样,以上内容适用于sql注入-这就是为什么;假设我们的用户名与以下内容相同:

username = "'MR SQL Injection');DROP TABLE HM_Login;"

这将导致删除表的SQL查询。

SELECT * FROM HM_Login WHERE Username = 'MR SQL Injection');DROP TABLE HM_Login;

为避免上述sql注入。使用第一个解决方案