为了账号安全,请及时绑定邮箱和手机立即绑定

使用%s的Python MySQL Connector数据库查询失败

使用%s的Python MySQL Connector数据库查询失败

弑天下 2019-08-23 10:02:38
使用%s的Python MySQL Connector数据库查询失败我有一个基本程序,应该查询包含用户信息的数据库。我正在尝试为特定用户选择信息并将其打印到控制台。这是我的代码: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。
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

将您的funcursor.execute(query, uName)电话改为:

funcursor.execute(query, (uName, ))

第二个参数execute采用字符串的列表/元组,而不是字符串。上面的调用在传入字符串之前创建了元组execute,因此不会抛出任何错误。

execute获取字符串列表/元组的原因是因为它不能事先知道为了满足您的查询需要多少字符串


查看完整回答
反对 回复 2019-08-23
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

这是因为execute期望列表或元组值作为第二个参数。逗号在现场创建一个元组,以满足函数的要求。execute不知道在读取之前需要在查询中替换多少个字符串,并且它不希望两次读取您的查询。所以它只是要求您查询,然后是字符串列表或元组。即使你只想替换一个字符串,你必须先将它变成一个列表或元组,然后再传入它。

查看完整回答
反对 回复 2019-08-23
  • 2 回答
  • 0 关注
  • 1095 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信