我有两个Django-ORM管理的数据库,我想合并。 两者都有非常相似的图象,而且两者都有标准用户表,还有几个相互参照的共享表,以及相对用户,我想自动并入一个数据库。
可理解的是,这可能非常不相称,取决于外国钥匙关系,而且每张表格中什么是“unique”记录。
是否有任何人知道是否有工具来完成这一合并行动?
如果目前不存在这样的情况,我正在考虑根据标准负荷数据指挥,撰写我自己的管理指挥部。 基本上,你利用标准丢弃数据指令从源数据库出口表格,然后使用经过修改的装货数据版本,将其“并入目的地数据库”。
例如,如果我有A和B数据库,而且我想将B数据库合并为A数据库,那么我就希望按照假冒编码采用一种程序:
merge_database_dst = A
merge_database_src = B
for table in sorted(merge_database_dst.get_redundant_tables(merge_database_src), key=acyclic_dependency):
key = table.get_unique_column_key()
src_id_to_dst_id = {}
for record_src in merge_database_src.table.objects.all():
src_key_value = record_src.get_key_value(key)
try:
record_dst = merge_database_dst.table.objects.get(key)
dst_key_value = record_dst.get_key_value(key)
except merge_database_dst.table.DoesNotExist:
record_dst = merge_database_dst.table(**[(k,convert_fk(v)) for k,v in record_src._meta.fields])
record_dst.save()
dst_key_value = record_dst.get_key_value(key)
src_id_to_dst_id[(table,record_src.id)] = record_dst.id
转换_fk()功能将利用电弧_id_to_dst_id指数将源表中的外国关键参考资料转换到目的地表中的同等身份识别资料。
总之,计算法将取代按抚养顺序合并的表格,父母先休。 因此,如果我们想合并桌子,以用户为依托,那么我们就会使[用户,我方言]变得.然。
每个合并的表格都需要某种指标,记录显示普遍独特记录的栏目组合(即“钥匙”)。 用户可以是“用户名称”和(或)“电子邮件”栏。
如果A数据库B中的关键价值已经存在,则记录不是从B进口,而是记录A中现有记录的识别。
如果A数据库B中的关键值不存在,则该记录从B进口,新记录的索引则记录在案。
利用先前记录的识别资料,绘制了地图,解释如何将外国对B中具体记录的提法与A中新的合并/现有记录进行测绘。 如果未来的记录并入A,则这一绘图将用来转换外国钥匙。
我仍然可以设想一些情况,即进口记录提到一个没有列入倾销数据表格的表格,这可能导致整个进口失败,因此,需要某种“dryrun”办法模拟进口,以确保能够翻译所有FK参考资料。
这似乎是一种实际做法吗? 是否有更好的办法?
EDIT:这确实是我所期望的,但我认为其他人可能认为是有意义的。 Turbion Project有一个机制,可以在同一个数据库内复制不同Django模型的对应记录。 它通过确定翻译层(即合并)。 模型Layer在两个Django模型之间表示,如果你更新“www” field inuser s Profile,则自动更新用户中的“url”领域
功能I m 望是一种比喻的不同之处,因为我想将整个(或部分)数据库按不定期的间隔进行,即负荷数据管理指挥的类型。