python - SQLite - 检查创建时的表格式并根据需要删除

标签 python sqlite

假设我需要一个必须有两列(A TEXT,B TEXT)的表。 每次运行程序之前,我想检查该表是否存在,如果不存在则创建它。现在假设具有该名称的表已经存在,但只有一列(A TEXT),或者可能是(A INT,B INT)

所以一般来说,不同的列。 如何在 CREATE 查询中检查这一点?如果存在冲突,请将其备份到某处并删除,然后创建一个新的正确表。如果没有冲突 - 不要做任何事情。

我正在使用 Python 工作,顺便使用 sqlite3。数据库暂时存储在本地,程序分发给多人,所以需要检查数据库。

目前我有

con = sqlite3.connect(path)
with con:
  cur = con.cursor()
  cur.execute('CREATE TABLE IF NOT EXISTS table (A TEXT, B TEXT);')

最佳答案

您可以使用 pragma table_info 来获取有关表的信息,并使用结果来检查您的列:

def validate(connection):
    cursor = connection.cursor()
    cursor.execute('PRAGMA table_info(table)')
    columns = cursor.fetchall()
    cursor.close()
    return (len(columns) == 2
            and columns[0][1:3] == ('A', 'TEXT')
            and columns[1][1:3] == ('B', 'TEXT'))

因此,如果 validate 返回 False,您可以重命名该表并创建新表。

关于python - SQLite - 检查创建时的表格式并根据需要删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31535378/

相关文章:

python - 在 Python 中计算图像数据集 channel 明智均值和标准差的最快方法

sql - 你能在 WHERE 子句中按字母顺序比较文本吗?

android - 如何知道当我启动 Android 设备时哪些应用程序将自动启动?

python - Python 中使用 DATETIME 和变量的 SQLite 查询未按预期工作

python - 怎么绑定(bind)escape键关闭这个窗口

python - 用于过滤请求的 Apache Thrift 代理

android - 不再需要数据库 - 如何从应用程序中删除数据库?

android - 删除查询是否修改了 Android 选择查询游标?

python - 有效地评估数组值和索引的函数

python - 如何从 Python 的 AST 中获取变量的类型?