Python MySQL 连接器查询 %s 失败
我有一个基本的程序,它的目的是从一个包含用户信息的数据库中查询数据。我想选择特定用户的信息并把它打印到控制台上。
这是我的代码:
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))
我把用户名存储在一个变量里,因为我打算稍后从一个tkinter的输入框中获取用户名。当我执行这段代码时,我遇到了以下错误:
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放在引号里,但这样的话,它就会字面上去查找用户名'%s',结果什么也找不到。我该怎么修改我的代码,才能只查询这个用户的信息呢?
谢谢。
顺便说一下:我使用的是python 3.3。
1 个回答
20
把你的 funcursor.execute(query, uName)
调用改成:
funcursor.execute(query, (uName, ))
在 execute
里,第二个参数应该是一个字符串的列表或元组,而不是单个字符串。上面的调用在传入字符串给 execute
之前,先创建了一个元组,所以不会报错。
之所以 execute
需要一个字符串的列表或元组,是因为它事先不知道你查询需要多少个字符串。