У меня есть db, и я хочу добавить к нему столбец, если он не существует. Как это сделать с помощью API sqlite.swift?Как проверить, существует ли столбец, перед добавлением его
4
A
ответ
6
Как правило, вы хотите иметь путь миграции, если вы добавляете новые столбцы в существующие таблицы. Вы можете использовать атрибут userVersion
для управления версиями схемы базы данных:
if db.userVersion < 1 {
db.create(table: users) { t in
t.column(id, primaryKey: true)
t.column(email, unique: true)
}
db.userVersion = 1
}
if db.userVersion < 2 {
db.alter(table: users, add: name)
db.alter(table: users, add: age)
db.userVersion = 2
}
Вы можете также, как и Макс предложил использовать ifNotExists:
на create(table:…)
уровне:
db.create(table: users, ifNotExists: true) { t in
t.column(id, primaryKey: true)
t.column(email, unique: true)
}
Но для добавления новых столбцов, должны разобрать громоздкую заявление Pragma:
let tableInfo = Array(db.prepare("PRAGMA table_info(users)"))
if tableInfo.filter { col in col[1] == "name" } == nil {
db.alter(table: users, add: name)
}
if tableInfo.filter { col in col[1] == "age" } == nil {
db.alter(table: users, add: age)
}
Не так читаемым (или рекомендуется), но если вы имеете дело с устаревшая база данных, возможно, необходима.
Обязательно прочтите the ALTER TABLE documentation для более сложных изменений.
2
Правильный путь для быстрой 2.0 заключается в следующем:
let tableInfo = Array(db.prepare("PRAGMA table_info(users)"))
let foundColumn = tableInfo.filter {
col in col[1] as! String == "name"
}
if(foundColumn.count == 0){
try! db.run(users.addColumn(name))
}
Я знаю, что это год назад, но как я могу получить userVersion от sqlite.swift? Я пытаюсь добавить столбцы в таблицы, которые могут или не могут уже существовать, но я не слишком уверен, как это сделать. Как проверить, существует ли таблица? потому что использование 'table.create (ifNotExists: true)' Я не могу сделать иначе, проверьте, существует ли столбец. Также как проверить, существует ли столбец? – apikurious