字符串格式化时Python sqlite3操作错误?

2024-03-28 10:37:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小的decorator函数,在这个函数中,我将在一个表中找到未知数量的条目:

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)

然后我得到一条错误消息:

^{pr2}$

sqlite3是否只接受?运算符?还是我搞砸了什么?在


Tags: 函数fromyouexecutehaveconnselectsqlite3
2条回答

cur.execute("SELECT * FROM %s") % total[0]行中,将%运算符应用于cur.execute调用的结果。我认为您希望在调用中进行替换,例如,cur.execute("SELECT * FROM ?", (total[0],))。在

您正在尝试替换元数据,因此不幸的是,参数化查询将无法工作。您必须在这里使用插值或类似方法,但是请确保该值已被清除;这是SQL注入的一个可能的向量。在

cur.execute("SELECT * FROM %s" % (total[0],))

相关问题 更多 >