Python MySQL Connector database query with %s fails

眉间皱痕 提交于 2019-11-26 01:09:19

问题


I have a basic program that is supposed to query a database that contains user information. I am trying to select the information for a specific user and print it out to the console.

Here is my code:

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))

I have the username stored in a variable because later I plan on getting the user name from a tkinter entry box. When I execute this code I get the following error:

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

I have tried putting the %s in quotes in the query but then it literally searches for a user names \'%s\' and returns nothing. How can I change my code so I can query the database for only this user?

Thank you.

FYI: I am using python 3.3.


回答1:


Change your funcursor.execute(query, uName) call to:

funcursor.execute(query, (uName, ))

The second argument in execute takes a list/tuple of strings, not a string. The above call creates the tuple before passing in the string to execute, so no error is thrown.

The reason why execute takes a list/tuple of strings is because it does not know beforehand how many strings it needs in order to satisfy your query.



来源:https://stackoverflow.com/questions/23600286/python-mysql-connector-database-query-with-s-fails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!