8

ユーザー情報を含むデータベースを照会することになっている基本的なプログラムがあります。特定のユーザーの情報を選択してコンソールに出力しようとしています。

これが私のコードです:

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 を使用しています。

4

1 に答える 1

19

funcursor.execute(query, uName)通話を次のように変更します。

funcursor.execute(query, (uName, ))

の 2 番目の引数はexecute、文字列ではなく、文字列のリスト/タプルを取ります。上記の呼び出しは、文字列を に渡す前にタプルを作成するexecuteため、エラーはスローされません。

文字列のリスト/タプルを取る理由executeは、クエリを満たすために必要な文字列の数を事前に知らないためです。

于 2014-05-12T02:49:41.373 に答える