Я хочу создать таблицу в базе данных SQLite, только если она еще не существует. Есть какой-либо способ сделать это? Я не хочу отбрасывать таблицу, если она существует, а создавать ее только в том случае, если это не так.
Создавать таблицу в SQLite, только если она еще не существует
comment
возможный дубликат Создание таблицы SQLite только в том случае, если это не так. они уже существуют
- person Toby Allen   schedule 16.08.2012
Ответы (2)
Из http://www.sqlite.org/lang_createtable.html:
CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
person
David Wolever
schedule
04.11.2010
Это работает и для индексов:
CREATE UNIQUE INDEX IF NOT EXISTS some_index ON some_table(some_column, another_column);
- person Michael Scheper; 22.10.2018
как насчет того, чтобы я тогда также сделал кучу вставок, только если ее не было? Я хочу создать производную таблицу на лету, если я обнаружу, что она не существует, не платя каждый раз за кучу операторов REPLACE.
- person Britton Kerin; 19.11.2019
@BrittonKerin, поэтому сначала вы должны проверить, существует ли таблица или нет (я полагаю, это ключ ... остальное просто запускает ваш код после выполнения условной проверки). Смотрите мой ответ в ответах на это условие.
- person aaronlhe; 31.05.2020
Я собираюсь попытаться повысить ценность этого очень хорошего вопроса и опираться на вопрос @BrittonKerin в одном из комментариев под фантастическим ответом @David Wolever. Хотел поделиться здесь, потому что у меня была та же проблема, что и у @BrittonKerin, и у меня что-то работает (т.е. просто хочу запустить кусок кода, только если таблица не существует).
# for completeness lets do the routine thing of connections and cursors
conn = sqlite3.connect(db_file, timeout=1000)
cursor = conn.cursor()
# get the count of tables with the name
tablename = 'KABOOM'
cursor.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name=? ", (tablename, ))
print(cursor.fetchone()) # this SHOULD BE in a tuple containing count(name) integer.
# check if the db has existing table named KABOOM
# if the count is 1, then table exists
if cursor.fetchone()[0] ==1 :
print('Table exists. I can do my custom stuff here now.... ')
pass
else:
# then table doesn't exist.
custRET = myCustFunc(foo,bar) # replace this with your custom logic
person
aaronlhe
schedule
31.05.2020