2016-03-27 4 views
1

değerlendiren değilpiton Sqlite3 hattı ... Ben burada bir yerlerde bir hata olmalı ama, korkunç yazma SQL ile deneyimli değil bulamıyorum doğru

>>> db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES ({wn}, {f})'.\ 
... format(tn=db.table1, c1n=db.column1, c2n=db.column2, wn='someword', f=1)) 
bana bu Traceback veriyor

...

Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    sqlite3.OperationalError: no such column: someword 

'someword' tamam, ekleme değerdir, değil arıyor sütun olmalıdır?

cevap

4

Sen değerler etrafında tırnak eksik: Bir yan not olarak

INSERT INTO {tn} ({c1n}, {c2n}) VALUES ('{wn}', '{f}') 
            HERE^ 

, sen dize biçimlendirme yoluyla aramaları yapılmasına olmamalıdır - güvenli değildir, sen SQL injection attacks kodunuzu savunmasız yapıyoruz (zaten gördüğünüz gibi) ve tip dönüşümleri ve tırnak sorunları alma. parameterized queries kullanın. Ne yazık ki, you cannot parameterize table and column names ve ayrı olarak doğrulamak gerekir; ancak sütun değerleri için parametre yerdeğiştirme yapabilirsiniz:

db.c.execute('INSERT INTO {tn} ({c1n}, {c2n}) VALUES (:wn, :f)'.\ 
    format(tn=db.table1, c1n=db.column1, c2n=db.column2), {'wn': 'someword', 'f': 1}) 
İlgili konular