在2个数据库之间合并差异表

时间:2019-09-16 19:55:24

标签: python database sqlite

好吧,所以我有一个我编写的程序(一些用户控制自动化),它有一个数据库-它正在我的一台Server上运行,版本是1.0。

上次我对该工具进行了一些升级(因此它的版本是1.5)。

我的问题是什么- 在版本1中,该工具的数据库类似于-

table a table b table c

在版本1.5中,我向数据库添加了更多表- table a table b table c table d table e

我需要什么?

我想将版本1.5中的所有新表添加到版本1的数据库中,而不丢失生产数据库中的所有生产数据。

只需将新数据库和旧数据库之间的所有新表移动到旧数据库。 (数据库之间的差异,并将所有差异表推入旧表。)

我有一个主意,该如何在python中执行此操作,例如- - Get list of tables from the new Database - Get list of tables from the old Database - Get tables diff - push manually table after table from the new to old

但是在我开始编写一些代码来做到这一点之前,也许有一些更简单的方法可以做到这一点?因为我很确定那不仅是我的问题。

有没有办法像这样破坏数据库?

Sqlite 3数据库

p.s。 不知道该问题的正确标题是什么,所以如果有人可以提出建议,那可能很棒:)

1 个答案:

答案 0 :(得分:1)

如果您只需要添加丢失的表-而不为现有表迁移行和列,则可以通过这种方式实现。

  1. 在通过生产数据库运行任何stackoverflow提示之前进行备份。 ;-)

  2. 将新数据库转储到sql文件中。

$ sqlite3 your_new_db.db
sqlite> .output dump.sql
sqlite> .dump
  1. 接下来,用CREATE TABLE替换所有CREATE TABLE IF NOT EXISTS的出现,并过滤掉所有其他SQL命令。
grep 'CREATE TABLE' dump.sql | sed -e 's|CREATE\ TABLE|CREATE\ TABLE\ IF\ NOT\ EXISTS|g' > add_missing_tables.sql
  1. 对输出满意后,将其导入到旧数据库中。
cat add_missing_tables.sql | sqlite3 your_old_db.db