python - 合并所有具有不同表的 SQLite 数据库

标签 python sqlite merge

是否有一种便宜/快速的方法来将 SQLite 数据库文件与不同的表合并?

例如:

  • a.db 只有表 a
  • b.db 只有表 b
  • ...

我想将它们合并到一个 abcd.db 中,其中包含所有abc,和d

我想我想要的是这样一个神奇的脚本:

merge_script a.db b.db c.db d.db -o abcd.db

我注意到了这个tip和另一个 tip和 ATTACH 技巧,它将所有记录插入“主”数据库,但是当“主”数据库中没有表时我可以这样做吗?

更新

我使用 SQLIte 数据库文件作为简单的存储容器。

在大多数情况下,我将每种类型的数据(根据表名不同)存储在一个文件中,然后将它们合并到“目标”数据库中。

但是有些类型的数据应该在同一个表名中。如果使用 sqlite3 .dump 表名会发生冲突。

然而 .dump 方法非常简单,我将做一些变通方法并使用它。

最佳答案

只需转储和恢复:

for db in a, b, c, d; { sqlite3 ${db}.db .dump | sqlite3 abcd.db }

[更新]

another question, is there any quick fix if tables are not all unique, and I want to merge contents? tdihp

这个问题有点太宽泛了。例如,您将如何处理主键违规?我会使用一些脚本语言(如 Python)来处理错误情况(sqlalchemy.SqlSoup 非常适合这种情况)。

就是说,如果您知道该表已经存在并且没有唯一约束,您可能可以使用一些临时的 bash 特技 - 假设 destinationtablename 和 sourcetablename 具有相同的结构:

$ ( echo '.mode insert destinationtablename'
    echo 'select * from sourcetablename;' 
  ) |  sqlite3 -batch -init - source.db \
    |  sqlite3 -batch destination.db

您可能不知道长评论线程在本网站被认为是粗鲁的,相反,我们鼓励您更新您的问题。一个更好的问题是:

  • 以后帮助其他有类似问题的用户
  • 为您赢得声望点数以赋予您特权(点数也可用于以后的赏金)

关于python - 合并所有具有不同表的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11733581/

相关文章:

python - 使用 python 脚本和 boto3 创建 MSK 主题

python - 嵌套函数中的局部变量

来自 inode 的 Python 文件名?

javascript - 如何显示整个数据库

r - 如何使用列名创建一个空数据表,然后将数据表附加到它?

python - 如何连接多索引列数据框

python - 通过 Column Pandas 获取计数

ios - 在 Swift ios 中从 SQlite 的 TableView 单元格中重复检索数据三次

java - JPA/Hibernate - 共享主键

XSLT 将同名兄弟节点的值合并/连接到单个节点中