Python脚本比较两个不同数据库中相同表的差异
我准备写一个Python脚本,帮助我在同一个应用程序的不同版本之间迁移数据。
在开始之前,我想知道有没有现成的脚本或模块可以用,或者至少可以作为我自己编写脚本的起点。我的想法是对比特定表格之间的数据,然后把差异存储为SQL插入语句,以便应用到早期版本的数据库中。
注意:这个脚本在面对数据库结构变化时并不够强大。
一般来说,逻辑大概是这样的:
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,并且总体上改进这个脚本?
1 个回答
0
为了在两个数据库之间移动数据,我使用了pg_comparator。它就像是SQL的“比较”和“补丁”工具!你可以用它来调整列的顺序,但如果你需要拆分或合并列,就得用其他工具了。
我还用它来异步复制数据库。每五分钟就会有一个定时任务运行,把“主”数据库上的所有变化推送到“从”数据库上。如果你只需要分发一个表,或者不是每个表的所有列,这个工具特别好用。