我即将编写一个python脚本来帮助我在同一个应用程序的不同版本之间迁移数据。
在我开始之前,我想知道是否有一个脚本或模块做了类似的事情,我可以使用,或者至少作为自己滚动的起点。我们的想法是在特定表之间区分数据,然后将diff存储为要应用于早期版本数据库的SQL INSERT语句。
注意:面对架构更改,此脚本不健壮
一般来说,逻辑就像
那样def diff_table(table1, table2):
# return all rows in table 2 that are not in table1
pass
def persist_rows_tofile(rows, tablename):
# save rows to file
pass
dbnames=('db.v1', 'db.v2')
tables_to_process = ('foo', 'foobar')
for table in tables_to_process:
table1 = dbnames[0]+'.'+table
table2 = dbnames[1]+'.'+table
rows = diff_table(table1, table2)
if len(rows):
persist_rows_tofile(rows, table)
这是编写此类脚本的好方法还是可以改进?我怀疑它可以通过缓存数据库连接等来改进(我遗漏了 - 因为我对SqlAlchemy等不太熟悉)。
有关如何添加SqlAlchemy以及通常改进此类脚本的任何提示吗?
答案 0 :(得分:0)
要在两个数据库之间移动数据,我使用pg_comparator。这就像sql的diff和patch!您可以使用它来交换列的顺序,但如果您需要拆分或合并列,则需要使用其他内容。
我也用它来异步复制数据库。 cron作业每五分钟运行一次,并将“master”数据库上的所有更改推送到“slave”数据库。如果你只需要分发一个表,或者不是每个表的所有列等,都特别方便。
答案 1 :(得分:0)
我今天早些时候遇到了同样的问题,我发现本指南对复制数据库非常有帮助。
http://www.tylerlesmann.com/2009/apr/27/copying-databases-across-platforms-sqlalchemy/
根据您的需要,我怀疑您需要实际区分两个表。 merge()很神奇。