2010-12-10 38 views
5

こんにちは ワイルドカードを使用したユーザー入力に基づいてSQliteテーブルを検索しようとしています。私はそれを働かせることができないために、さまざまな方法を試みました。 これは、私が実際にここで見つけましたが、それはこれが最後の行に、このエラーを生成pythonで3Python + sqlite:ワイルドカードを使用したLIKEクエリ

search = input("type name or partial name: ") 
    cur.execute("select * from contacts where name like ?", 
       ('%'+search+'%')) 

を変更している可能性がある解決策だ、私が試した最後のものです。

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

私は多くの異なることを試みました。これが私を狂っています。私は最初にテーブル全体を文字列に読み込まなければこれが不可能だと思っています。

答えて

11

問題は文字列を含む単一要素のタプルを指定することを意味するときに、cur.executeの2番目の引数として文字列を指定したことが原因です。

文字列はシーケンスなので、文字列内のすべての文字は別個のパラメータとして解釈されるため、「不正な数のバインディング」エラーが表示されます。

試してみてください。

cur.execute("select * from contacts where name like ?", ('%'+search+'%',)) 

注タプルにカンマ、('%'+search+'%',)。それがなければ、それはタプルではなく、カッコで囲まれた文字列です。

+0

が表示されます。ありがとう、たくさんの男:D –

+0

@steiniこの回答がうまくいくなら、それを「受け入れてください」。 – bogeymin

関連する問題