Python MySQL 连接器查询 %s 失败

8 投票
1 回答
8110 浏览
提问于 2025-04-18 06:15

我有一个基本的程序,它的目的是从一个包含用户信息的数据库中查询数据。我想选择特定用户的信息并把它打印到控制台上。

这是我的代码:

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 需要一个字符串的列表或元组,是因为它事先不知道你查询需要多少个字符串。

撰写回答