2010-12-10 23 views
5

Merhaba Joker karakterleri olan bir kullanıcı girdisini temel alarak bir SQlite tablosu aramaya çalışıyorum. Çalışması için farklı yöntemler denedim. Bu denedim son şey, ben burada aslında bulunan bir çözüm, ama piton 3.Python + sqlite: joker karakterler ile LIKE sorgusu

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

Bu Oradaki son satırında bu hata üretir içinde değişmiş olabilir.

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

Çok farklı bir şey denedim ve bu beni deli ediyor. Tüm masayı ilk önce bir dizeye okumadan bunun mümkün olmadığını düşünmeye başladım.

cevap

11

Sorununuz, büyük olasılıkla dizeyi içeren tek öğeli bir tuple sağlamanız gerektiğinde, cur.execute numaralı ikinci argüman olarak bir dize sağladığınıza benziyor.

Bir dize bir sıra olduğundan, dizgedeki her karakter ayrı bir parametre olarak yorumlanır ve bu nedenle "Yanlış bağ sayısı" hatasını görürsünüz.

Dene:

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

Not demet içinde virgül, ('%'+search+'%',). Bu olmadan, bir tuple değil, sadece parantez içinde bir dize.

+0

Anladım. Çok teşekkür ederim: D –

+0

@steini Bu cevap sizin için işe yararsa, lütfen "kabul edin". – bogeymin

İlgili konular