Python sqlite3 参数化删除表

7 投票
1 回答
3404 浏览
提问于 2025-04-16 15:24

我在用Python删除sqlite3表的时候遇到了问题。我使用的是标准的 sqlite3 模块。

self.conn = sqlite3.connect(...)

sql = """ drop table ? """
self.conn.execute( sql, (u'table_name',) )

这段代码让我收到一个错误提示:OperationalError: near "?": syntax error

当我把 sql 改成:

sql = """ drop table table_name """

这样就没问题了。

1 个回答

12

你不能用参数来表示表名或者列名。

另外,你可以把这个过程分成两步来做,比如:

a_table_name = "table_a"
sql_stmt = f"""DROP TABLE {a_table_name}"""
self.conn.execute(sql_stmt)

如果你这样做的话,可能还需要明确指定哪些表是可以被删除的……

TABLES_THAT_CAN_BE_DROPPED = ('table_a','table_b',)
if a_table_name in TABLES_THAT_CAN_BE_DROPPED:
    # use code snippet from above 
else:
    pass # handle creatively

撰写回答