2015-11-22 54 views
3

我有一个遗留数据库,由几个遗留应用程序使用。我正在构建一个使用这个遗留数据库的新Django应用程序,但我也想开始构建自己的数据库,它的结构与旧数据库不同。作为一个例子,旧的数据库可能有一个person表像Django:使用两种不同的数据库,对于模型

id | first_name | last_name 

和新的数据库有一个person表像

id | whole_name 

因为旧的数据库最终将不能用于这个程序,我想要建立模型,以便“切换”尽可能简单。基本上,我需要能够从旧数据库中读取数据,并使用transform方法(假设我已经写过它),请根据新数据库填写一个模型。然后,在写入数据时,它将被写入两个数据库,使用detransform方法转换为旧结构。

因此,我需要以下内容。

  • 任何读取操作(如queryall)从旧的数据库抓住数据,将其转换到新的数据库结构,并填充模型实例
  • 任何写操作(如save)将数据写入到这两个数据库:按原样用于新的数据库,并且对旧数据库进行反变换的结果
  • 我希望这对模型尽可能透明,以便稍后当我们只需要新数据库时,尽可能少代码尽可能需要更改

我目前的想法是通常为所有旧表格编写模型。然后为新模型编写一个抽象基类,它覆盖了save方法并定义了一个自定义管理器(例如重新实现了get_query_set方法)。然后,新表的所有模型都将继承此基类。当我们准备切换到只使用新的数据库时,我们只需将基类作为存根。

这是正确的方法吗?有更好的方法吗?我试过看数据库路由器,但它们似乎只在表结构相同时才起作用。

+0

在切换到新数据库(继续写入数据或获取数据)后,您是否必须支持与旧数据库的向后兼容? –

回答

0

您可以为一个应用程序使用少数数据库。 我建议你定义两个模型,并重新定义模型的保存方法到旧的数据库,并创建模型到新的数据库的方法(它允许您创建和保存新的数据库时,新的数据库实例保存到旧数据库)。 稍后,您只需删除代码(对旧模型使用的地方进行+次要重构)。

相关问题