如何使用python删除sqlite3中的所有表?

kx7yvsdv  于 2023-04-06  发布在  SQLite
关注(0)|答案(3)|浏览(373)

我做了一个项目,从用户收集数据并将其存储在不同的表中,该应用程序具有删除功能,第一个选项是删除一个特定的表,这是我已经做了,第二个是删除所有现有的表。
如何删除数据库中的所有表?
这就是我的变量

conn = sqlite3.connect('main.db')
    cursor = conn.execute("DROP TABLE")

    cursor.close()
hivapdat

hivapdat1#

  • 如何删除数据库中的所有表?*

根据sqlitetutorial.net
SQLite允许您一次只删除一个表。要删除多个表,您需要发出多个DROP TABLE语句。

cld4siwp

cld4siwp2#

您可以通过查询所有表名(https://www.sqlite.org/faq.html#q7)来完成此操作
然后可以使用结果逐个删除表
下面是代码,函数delete_all_tables完成了这一任务

TABLE_PARAMETER = "{TABLE_PARAMETER}"
DROP_TABLE_SQL = f"DROP TABLE {TABLE_PARAMETER};"
GET_TABLES_SQL = "SELECT name FROM sqlite_schema WHERE type='table';"

def delete_all_tables(con):
    tables = get_tables(con)
    delete_tables(con, tables)

def get_tables(con):
    cur = con.cursor()
    cur.execute(GET_TABLES_SQL)
    tables = cur.fetchall()
    cur.close()
    return tables

def delete_tables(con, tables):
    cur = con.cursor()
    for table, in tables:
        sql = DROP_TABLE_SQL.replace(TABLE_PARAMETER, table)
        cur.execute(sql)
    cur.close()
neekobn8

neekobn83#

基于TEMP_%名称通配符发出多个DROP TABLE语句的SQLite3代码:

.output droptables.sql
SELECT "DROP TABLE """|| sqlite_master.name ||""";" FROM sqlite_master 
WHERE type = "table" AND sqlite_master.name LIKE 'TEMP_%';
.read droptables.sql

.sql输出文件中的结果示例:

DROP TABLE "TEMP_table1";
DROP TABLE "TEMP_table2";
DROP TABLE "TEMP_table3";
...

Python3将SQL粘贴到:

conn = sqlite3.connect(f"main.db")
 conn.row_factory = sqlite3.Row
 dbc = conn.cursor()

 dbc.execute(
            f"DROP TABLE 'TEMP_table1';"
    )
 conn.commit()

相关问题