7

我需要在 python 中执行一个 SQL 查询,在 sqlite3 中添加一个新列。

问题是有时它已经存在。所以在执行查询之前,我需要检查该列是否已经存在。

如果是这样,那么我不会执行查询。

sqlite有没有办法做到这一点?还是我必须通过 python 代码中的 try-catch 块来实现它?

提前非常感谢!

4

3 回答 3

15

您可以通过以下语句获取表的列列表:

PRAGMA table_info('table_name');

有关 pragma 命令的更多详细信息,请访问sqlite 网站

于 2010-03-01T09:15:59.777 回答
14

海事组织这个

conn = sqlite3.connect(':memory:')
c = conn.cursor()
try:
    c.execute('ALTER TABLE mytable ADD COLUMN newcolumn;')
except:
    pass # handle the error
c.close()

是比构造特殊情况查询更好的选择。

您可以将上面的代码包装在 AddColumn(cursor, table, column) 函数中,这样您就可以重用它,
而且它会使代码更具可读性。

于 2010-03-01T09:30:35.020 回答
0

出于任何原因,您想要一种明确的方法来检查列是否已经存在,您可以在下面找到完整的 Python 配方。由您将代码包装在函数中或改进它

import sqlite3

sqlite_db = 'my_sqlite_db.sqlite'
col_to_test = 'my_column'
table_to_test = 'my_table_name'

con = sqlite3.connect(sqlite_db)
check_sqlite_col_exist_query = """SELECT count(*) > 0
FROM pragma_table_info('{}')
WHERE name=?;""".format

with con:
    q = con.execute(check_sqlite_col_exist_query(table_to_test), (col_to_test, ))
    col_exist = q.fetchone()
    col_exist = col_exist[0] > 0
    if not col_exist:
        print('"{}" column does not exist in table "{}"!'.format(col_to_test, table_to_test))
        # Do stuff here like adding your column or something else
    else:
        print('"{}" column already exist in table "{}"!'.format(col_to_test, table_to_test))
于 2020-11-25T15:25:18.973 回答