问题 最快的方式合并两个SQLITE数据库


我有3个SQLite DB,每个都有与表结构完全相同的7个表组。 [它们是来自3种不同机器的日志转储]。

我想将它们组合成一个SQLite DB,具有相同的7个表,但每个表应该具有来自所有三个DB的组合数据。因为我想在其中的3个中运行查询。 什么是最好,最快的方法。


10202
2018-02-19 13:39


起源

stackoverflow.com/questions/80801/..., stackoverflow.com/questions/3689694/..., stackoverflow.com/questions/3232900/..., stackoverflow.com/questions/4913369/..., stackoverflow.com/questions/9048711/merging-databases,...那里没有任何内容或相关问题对你有帮助吗? - Mat
是的,我经历过它们,还有更多。我正在寻找在我的python代码中执行该操作的强大方法,因此我正在寻找最佳实践。 - subiet
@subiet,如果有重复的行怎么办? - Pacerier


答案:


将每个数据库导出到SQL转储,然后将转储导入新的组合数据库。

对于GUI,请看一下 http://www.sqlite.org/cvstrac/wiki?p=ManagementTools

例如,用 SQLiteStudio 那将是 数据库 > 导出数据库出口格式SQL > 完成


4
2018-02-19 13:51



嘿,GUI不是一个选项,这必须反复完成一个程序。我将探讨SQL转储方法,它会处理每个表中ID的主键约束,我对此有点怀疑。 - subiet
为什么需要导出主键?导出数据并插入记录,将为您生成密钥。如果你想用Python做,那么看看 mysql-python.sourceforge.net/MySQLdb.html#some-examples 和 kitebird.com/articles/pydbapi.html - ccpizza


这是将两个数据库与相同结构的所有表合并的一种方法。我希望它可以提供帮助。

import sqlite3
con3 = sqlite3.connect("combine.db")

con3.execute("ATTACH 'results_a.db' as dba")

con3.execute("BEGIN")
for row in con3.execute("SELECT * FROM dba.sqlite_master WHERE type='table'"):
    combine = "INSERT INTO "+ row[1] + " SELECT * FROM dba." + row[1]
    print(combine)
    con3.execute(combine)
con3.commit()
con3.execute("detach database dba")

9
2018-05-10 12:25