假设我需要一个必须有两列(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);')
答案 0 :(得分:1)
您可以使用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
,您可以重命名该表并创建新表。