1

ログインウィンドウを作成すると、名前、ユーザー名、パスワードを含むテーブル「peerlist」がありました。テーブルからユーザー名とパスワードを確認したい。

username1 には、ログイン ウィンドウから取得したユーザーの名前が含まれています。username1 を使用してパスワードを取得しようとしました。

cursor.execute( "SELECT password FROM peerlist WHERE username=?",username1)

しかし、エラーが発生しました

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current 
                          statement uses 1, and there are 3 supplied.
4

2 に答える 2

6

パラメータにタプルを使用します。

cursor.execute( "SELECT password FROM peerlist WHERE username=?", (username1,))

パラメータはタプルまたはリスト(シーケンス)であると想定されています。ただし、文字列もシーケンスであるため(長さがあり、個々の文字をアドレス指定できます)、.execute()呼び出しlen(username1)に1つのパラメーターではなく文字のシーケンスを指定しました。どうやらユーザー名は3文字の長さなので、エラーメッセージが表示されます。

于 2013-03-11T10:03:25.580 に答える
-3

これは悪い考えです。SQL インジェクションが発生します。詳細はhttp://docs.python.org/2/library/sqlite3.htmlを参照してください

cursor.execute( "SELECT password FROM peerlist WHERE username=%s"%(username1))
于 2013-03-11T10:00:19.897 に答える