从Python的文档(https://docs.python.org/3/library/sqlite3.html#sqlite3.Cursor.execute)中,我应该能够使用参数化的占位符执行SQL语句。但是,下面的代码不起作用。
import sqlite3
conn = sqlite3.connect("temp.db")
c = conn.cursor()
c.execute("create table ? (foo text, bar text)", ("table_name",))
conn.commit()
conn.close()
我遇到错误:
Traceback (most recent call last):
File "main.py", line 6, in <module>
c.execute("create table ? (foo text, bar text)", ("table_name",))
sqlite3.OperationalError: near "?": syntax error
但是,如果我退出使用参数化的占位符,它将起作用。
答案 0 :(得分:1)
总之-不。您只能参数化值,不能参数化对象名称(在这种情况下,是表的名称)。如果您想做这样的事情,则必须诉诸字符串操作,例如:
c.execute("create table %s (foo text, bar text)" % ("table_name"))