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