将所有SQLite数据库与不同的表合并

时间:2012-07-31 05:22:44

标签: python sqlite merge

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

例如:

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

我想将这些内容合并到包含所有abcd.dbabc的{​​{1}}中

我认为我想要的是这样一个神奇的剧本:

d

我注意到了这个tip和另一个tip以及ATTACH技巧,它将所有记录插入“主”数据库,但是我可以在“主”数据库中没有表时执行此操作吗?

更新

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

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

但是有些类型的数据应该在同一个表名中。如果使用merge_script a.db b.db c.db d.db -o abcd.db ,则表名中会有冲突。

然而sqlite3 .dump方法很简单,我只是做一些解决方法并使用它。

1 个答案:

答案 0 :(得分:6)

转储和恢复:

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

[更新]

  

另一个问题,是否有任何快速解决方法,如果表格不是唯一的,我想合并内容? tdihp

这个问题有点过于宽泛。例如,你会对主键违规做什么?我会使用像Python这样的脚本语言来处理错误条件(sqlalchemy.SqlSoup对于这种事情非常好)。

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

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

您可能不知道此网站中的长评论帖被认为是粗鲁的,而是鼓励您更新您的问题。一个更好的问题是:

  • 帮助将来有类似问题的其他用户
  • 为您赢得授予您特权的声望积分(积分也可以用于以后奖励)