Python sqlite3 参数化删除表

Posted

技术标签:

【中文标题】Python sqlite3 参数化删除表【英文标题】:Python sqlite3 parameterized drop table 【发布时间】:2011-04-09 20:35:40 【问题描述】:

我在 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】:

您不能对表名或列名使用参数。

或者,您可以将其设为两步过程,例如:

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

【讨论】:

太糟糕了,我想将executemany() 与表格列表一起使用。知道这是否可行吗? 循环遍历表名是否太慢了? 当然不是。我只是喜欢让事情尽可能简单:)。感谢您的回答!

以上是关于Python sqlite3 参数化删除表的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3_and_sql

Python基于 sqlite3 的数据库操作(零基础入门教程)

SQLITE3清空表

删除系统版本化时态表的过程

sqlite方法-2.0

如何在 Django 1.9 中删除 DB (sqlite3) 以从头开始?