【问题标题】:Merging diff tables between 2 Databases sqlite合并 2 个数据库 sqlite 之间的差异表
【发布时间】:2019-09-17 04:39:57
【问题描述】:

好的,所以我有一个我编写的程序(一些用户控制自动化),它有一个数据库 - 它刚刚在我的一个服务器上运行,它的版本是 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 数据库

附言 不知道问题的正确标题是什么,所以如果有人可以提出建议,那就太好了:)

【问题讨论】:

  • 只是表格?你也想迁移他们的行吗?

标签: python database sqlite


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-05-17
    • 2010-09-22
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多