首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何合并多个SQLite数据库?

如何合并多个SQLite数据库?
EN

Stack Overflow用户
提问于 2008-09-17 15:28:45
回答 4查看 87.6K关注 0票数 78

如果我有大量具有相同模式的SQLite数据库,那么将它们合并在一起以便在所有数据库上执行查询的最佳方法是什么?

我知道使用ATTACH可以做到这一点,但它有32和64个数据库的a limit,这取决于机器上的内存系统。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-17 08:03:39

这将是按需完成的,可能一天几次。我会看到它的工作方式就像在http://sqlite.1065341.n5.nabble.com/Attempting-to-merge-large-databases-td39548.html中,数据库被合并到一个大型数据库中,执行查询,然后删除大型数据库。

票数 18
EN

Stack Overflow用户

发布于 2008-09-17 07:31:30

如果您只需要执行一次此合并操作(创建一个新的更大的数据库),则可以创建一个脚本/程序,该脚本/程序将循环所有sqlite数据库,然后将数据插入到主(大)数据库中。

票数 1
EN

Stack Overflow用户

发布于 2021-07-26 16:30:24

下面是一段简单的python代码,用于合并两个数据库文件或扫描目录以查找所有数据库文件并将它们合并在一起(只需将其他文件中的所有数据插入到找到的第一个数据库文件中):

代码语言:javascript
复制
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):
    db_files = read_files(directory)
    for db_file in db_files:
        merge_databases(db_files[0], db_file)

if __name__ == '__main__':
    batch_merge('/directory/to/database/files')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/80801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档