开发者

ALTER TABLE Sqlite: how to check if a column exists before alter the table?

开发者 https://www.devze.com 2022-12-21 18:39 出处:网络
I need to execute in python a SQL query that adds a new column, in sqlite3. The problem is that sometimes it already exists. So previous to executing the query I need to check if th开发者_JAVA百科e

I need to execute in python a SQL query that adds a new column, in sqlite3.

The problem is that sometimes it already exists. So previous to executing the query I need to check if th开发者_JAVA百科e column already exists.

If it does, then I won't execute the query.

Is there a way in sqlite to do that? Or do I have to make it through a try-catch block in python code?

Thanks a lot in advance!


You can get a list of columns for a table via the following statement:

PRAGMA table_info('table_name');

More details on the pragma commands are availabel at the sqlite web site


IMO this

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

is a better choice than constructing special case queries.

You can wrap the above code in a AddColumn(cursor, table, column) function so you can reuse it,
plus it'll make the code more readable.


For any reason you want an explicitly way to check if a column is already present, you can find a full Python recipe below. Up to you to wrap the code in a function or improve it

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))
0

精彩评论

暂无评论...
验证码 换一张
取 消