3

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

例如:

  • a.db只有桌子a
  • b.db只有桌子b
  • ...

我想将这些合并到一个abcd.db包含所有abcd.

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

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

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

更新

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

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

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

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

4

1 回答 1

6

只需转储和恢复:

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

[更新]

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

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

也就是说,如果您知道该表已经存在并且没有唯一约束,那么您可能可以通过一些临时 bash 特技来解决问题 - 假设 destinationtablename 和 sourcetablename 具有相同的结构:

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

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

  • 帮助将来有类似问题的其他用户
  • 为您赢得声望点,赋予您特权(点数也可用于稍后的赏金)
于 2012-07-31T05:49:08.920 回答