好吧,所以我有一个我编写的程序(一些用户控制自动化),它有一个数据库-它正在我的一台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。 不知道该问题的正确标题是什么,所以如果有人可以提出建议,那可能很棒:)
答案 0 :(得分:1)
如果您只需要添加丢失的表-而不为现有表迁移行和列,则可以通过这种方式实现。
在通过生产数据库运行任何stackoverflow提示之前进行备份。 ;-)
将新数据库转储到sql文件中。
$ sqlite3 your_new_db.db
sqlite> .output dump.sql
sqlite> .dump
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
cat add_missing_tables.sql | sqlite3 your_old_db.db