使用%s的Python MySQL连接器数据库查询失败

我有一个基本的程序,应该查询包含用户信息的数据库。 我正在尝试为特定用户select信息并将其打印到控制台。

这是我的代码:

import mysql.connector funcon = mysql.connector.connect(user='root', password='pass', host='127.0.0.1', database='fundata') funcursor = funcon.cursor() query = ("SELECT * FROM funtable WHERE userName=%s") uName = 'user1' funcursor.execute(query, uName) for (userName) in funcursor: print("{}".format(userName)) 

我有用户名存储在一个variables,因为后来我打算从tkinterinput框中获取用户名。 当我执行这个代码时,我得到以下错误:

 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 '%s' at line 1 

我试图在查询中将%s放在引号中,但是它直接search用户名'%s'并且不返回任何内容。 我怎样才能更改我的代码,所以我可以查询数据库只有这个用户?

谢谢。

仅供参考:我正在使用python 3.3。

将您的funcursor.execute(query, uName)调用更改为:

 funcursor.execute(query, (uName, )) 

execute的第二个参数是一个string的列表/元组,而不是一个string。 上面的调用在传入要execute的string之前创build了元组,因此不会引发错误。

为什么execute需要一个string的列表/元组是因为它不会事先知道它需要多less个string才能满足您的查询。