0

テーブル内の不明な数のエントリを見つけるこの小さなデコレータ関数があります。

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 は?演算子のみを受け入れますか? それとも、私が何かをいじっていますか?

4

2 に答える 2

3

メタデータを置き換えようとしているため、残念ながらパラメーター化されたクエリは機能しません。ここでは補間などを使用する必要がありますが、値がサニタイズされていることを確認してください。これは、SQL インジェクションの可能性のあるベクトルです

cur.execute("SELECT * FROM %s" % (total[0],))
于 2012-08-20T02:54:45.460 に答える
2

行では、呼び出しの結果に演算子をcur.execute("SELECT * FROM %s") % total[0]適用しています。たとえば、呼び出し内で置換を行いたいと思います。%cur.executecur.execute("SELECT * FROM ?", (total[0],))

于 2012-08-20T02:36:25.020 に答える