簡體   English   中英

字符串格式化時,Python sqlite3操作錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM