ALTER TABLE Sqlite: как проверить, существует ли столбец перед изменением таблицы?

Мне нужно выполнить в Python SQL-запрос, который добавляет новый столбец, в sqlite3.

Проблема в том, что иногда он уже существует. Поэтому перед выполнением запроса мне нужно проверить, существует ли уже столбец.

Если это произойдет, то я не буду выполнять запрос.

Есть ли способ в sqlite сделать это? Или я должен сделать это через блок try-catch в коде Python?

Заранее большое спасибо!

2 ответа

Решение

Вы можете получить список столбцов для таблицы с помощью следующего оператора:

PRAGMA table_info('table_name');

Более подробную информацию о командах pragma можно найти на веб-сайте sqlite.

ИМО это

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

это лучший выбор, чем создание специальных запросов.

Вы можете обернуть вышеупомянутый код в функцию AddColumn(курсор, таблица, столбец), чтобы вы могли использовать его повторно,
плюс это сделает код более читабельным.

По какой-либо причине вам нужен явный способ проверить, присутствует ли уже столбец, вы можете найти полный рецепт 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))
Другие вопросы по тегам