2012-12-14 35 views
10

Bu sqlite3 sorgusunu Python'da çalıştırmayı deniyorum. Kodu minimum, sqlite.connect vb.Yürütme sırasında Python sqlite3 dize değişkeni

column = 'Pron_1_Pers_Sg' 
goal = 'gender' 
constrain = 'Mann' 


with con: 
    cur = con.cursor() 

    cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain)) 
    con.commit() 

    rows = cur.fetchall() 

    for element in rows: 
     values.append(element) 

Bu, boş bir liste döndürür. Dizeleri sabitlerseniz, çalışır ve değerler döndürür.

cevap

25

Parametre işaretçileri yalnızca ifadeler, yani değerler için kullanılabilir. Tablo ve sütun adları gibi tanımlayıcılar için bunları kullanamazsınız.

bunu kullanın:

cur.execute("SELECT "+column+" FROM Data where "+goal+"=?", (constrain,)) 

veya bu:

cur.execute("SELECT %s FROM Data where %s=?" % (column, goal), (constrain,)) 

(. Aslında verilerine erişmek bitirmeden önce Ve taahhüt yok)

+0

Yemin ederim, bu soruyu yazmadan önce denedim! Her neyse, şimdi çalışıyor. Teşekkürler! – Steffen

+1

sql enjeksiyonuna karşı savunmasız mı olacak? –

+1

@DrewV Evet, 'sütunun' veya 'hedefinin' bir saldırgan tarafından kontrol edilmesine izin verirseniz. –

-1

Bugün de benzer bir problem yaşıyordum. Önemli

cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain,)) 

son bu benim koduyla sorun oldu,

Bir deneyin, - belki çok yardımcı olur: Bu sorunu çözmek mı diye, emin değilim. Özür dilerim, gerçekten nedenini açıklayamadığım için, sadece kendimi öğreniyorum ve python/sqlite'e birkaç hafta için uğraşıyorum.

+2

A ',' sonuçta, sadece bir öğeyle birlikte, düz bir ifadeden ayırt etmek için gerekli olan tupleler için gereklidir. –

+1

Teşekkürler, ama bu yardımcı olmuyor. Ama bir şeyi açıklayabilirim: Yani, sağlanan değer bir tuple sahip olmak zorundadır. – Steffen

+0

İkinize çok teşekkürler. Bu gerçekten bana, tüm gün boyunca kafamı sarmaya çalıştığımı anlamama yardımcı oldu. – sdoering

0

bu deneyin: c.execute("SELECT {idf} FROM Data WHERE {goal}".\ format(idf=column, goal=constrain))

İlgili konular