[英]Python sqlite3 operational error when string formatting?
我有一個小的裝飾器函數,可以在其中查找表中未知數量的條目:
def Deco(func):
func
conn = sqlite3.connect('/home/User/vocab_database/vocab.db')
with conn:
cur = conn.cursor()
cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
total = cur.fetchall()
print "You have %d tables " % len(total)
## this line below, is where I wanted to use a formatted string ##
cur.execute("SELECT * FROM %s") % total[0]
entries = cur.fetchall()
print "You have %d entries" % len(entries)
然后我收到此錯誤消息:
Traceback (most recent call last):
File "./database_trial.py", line 19, in <module>
class Vocab:
File "./database_trial.py", line 25, in Vocab
@Deco
File "./database_trial.py", line 15, in Deco
cur.execute("SELECT * FROM %s") % total[0]
sqlite3.OperationalError: near "%": syntax error
sqlite3只接受?
運營商? 還是我在想什么?
您正在嘗試替換元數據,因此不幸的是,參數化查詢將不起作用。 您必須在此處使用插值之類的方法,但要確保已清除該值; 這是SQL注入的可能向量 。
cur.execute("SELECT * FROM %s" % (total[0],))
在cur.execute("SELECT * FROM %s") % total[0]
,您將%
運算符應用於cur.execute
調用的結果。 我認為您想在調用內進行替換,例如cur.execute("SELECT * FROM ?", (total[0],))
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.