Этот пост ссылается на эту страницу для слияния баз данных SQLite.
Последовательность следующая. Допустим, я хочу объединить a.db и b.db. В командной строке я делаю следующее:
Это работает хорошо, но на указанном сайте спрашивающий спрашивает о повышении скорости, и в ответ следует использовать команды «начать» и «зафиксировать».
Затем я придумал следующий код на Python, чтобы сделать то же самое. Я абстрагирую вызовы функций SQLite с помощью SQLiteDB, и один из его методов - runCommand (). У меня та же ошибка, хотя я удалил self.connector.commit ().
# run command
def runCommand(self, command):
self.cursor.execute(command)
self.connector.commit() # same error even though I delete this line
db = SQLiteDB('a.db')
cmd = "attach \"%s\" as toMerge" % "b.db"
print cmd
db.runCommand(cmd)
cmd = "begin"
db.runCommand(cmd)
cmd = "insert into benchmark select * from toMerge.benchmark"
db.runCommand(cmd)
cmd = "commit"
db.runCommand(cmd)
cmd = "detach database toMerge"
db.runCommand(cmd)
Но я получил следующую ошибку.
OperationalError: cannot commit - no transaction is active
Несмотря на то, что ошибка, db результата хорошо слита. А без начала / фиксации ошибок вообще нет.