我有一个遗留数据库,由几个遗留应用程序使用。我正在构建一个使用这个遗留数据库的新Django应用程序,但我也想开始构建自己的数据库,它的结构与旧数据库不同。作为一个例子,旧的数据库可能有一个person
表像Django:使用两种不同的数据库,对于模型
id | first_name | last_name
和新的数据库有一个person
表像
id | whole_name
因为旧的数据库最终将不能用于这个程序,我想要建立模型,以便“切换”尽可能简单。基本上,我需要能够从旧数据库中读取数据,并使用transform
方法(假设我已经写过它),请根据新数据库填写一个模型。然后,在写入数据时,它将被写入两个数据库,使用detransform
方法转换为旧结构。
因此,我需要以下内容。
- 任何读取操作(如
query
或all
)从旧的数据库抓住数据,将其转换到新的数据库结构,并填充模型实例 - 任何写操作(如
save
)将数据写入到这两个数据库:按原样用于新的数据库,并且对旧数据库进行反变换的结果 - 我希望这对模型尽可能透明,以便稍后当我们只需要新数据库时,尽可能少代码尽可能需要更改
我目前的想法是通常为所有旧表格编写模型。然后为新模型编写一个抽象基类,它覆盖了save
方法并定义了一个自定义管理器(例如重新实现了get_query_set
方法)。然后,新表的所有模型都将继承此基类。当我们准备切换到只使用新的数据库时,我们只需将基类作为存根。
这是正确的方法吗?有更好的方法吗?我试过看数据库路由器,但它们似乎只在表结构相同时才起作用。
在切换到新数据库(继续写入数据或获取数据)后,您是否必须支持与旧数据库的向后兼容? –