瘦瘦的自行车 · 步非烟中文音声 ...· 8 月前 · |
留胡子的毛豆 · 这个妖女缠上我了(野生的天)全本在线阅读-起 ...· 10 月前 · |
忐忑的围巾 · 蔚来ET5本月将在欧洲开启交付,首批新车已抵达挪威· 1 年前 · |
会搭讪的键盘 · 13.99 万元起,蓝电 E5 ...· 1 年前 · |
如果您只需要执行一次此合并操作(创建一个新的更大的数据库),则可以创建一个脚本/程序,该脚本/程序将循环所有sqlite数据库,然后将数据插入到主(大)数据库中。
这将是按需完成的,可能一天几次。我会看到它的工作方式就像在 http://sqlite.1065341.n5.nabble.com/Attempting-to-merge-large-databases-td39548.html 中,数据库被合并到一个大型数据库中,执行查询,然后删除大型数据库。
无意冒犯,就像一个开发人员对另一个开发人员一样,我担心你的想法似乎非常低效。在我看来,您应该在同一个数据库文件中存储多个表,而不是联合SQLite数据库。
但是,如果我弄错了,我猜您可以附加数据库,然后使用视图来简化查询。或者创建一个内存中的表并复制所有数据(但这在性能方面更差,特别是在您有大型数据库的情况下)
下面是一段简单的python代码,用于合并两个数据库文件或扫描目录以查找所有数据库文件并将它们合并在一起(只需将其他文件中的所有数据插入到找到的第一个数据库文件中):
import sqlite3
import os
def merge_databases(db1, db2):
con3 = sqlite3.connect(db1)
con3.execute("ATTACH '" + db2 + "' as dba")
con3.execute("BEGIN")
for row in con3.execute("SELECT * FROM dba.sqlite_master WHERE type='table'"):
combine = "INSERT OR IGNORE INTO "+ row[1] + " SELECT * FROM dba." + row[1]
print(combine)
con3.execute(combine)
con3.commit()
con3.execute("detach database dba")
def read_files(directory):
fname = []
for root,d_names,f_names in os.walk(directory):
for f in f_names:
c_name = os.path.join(root, f)
filename, file_extension = os.path.splitext(c_name)
if (file_extension == '.sqlitedb'):
fname.append(c_name)
return fname
def batch_merge(directory):