我有一个遗留数据库,它被几个遗留应用程序使用。我正在构建一个新的django应用程序,它使用这个遗留数据库,但我也希望开始构建自己的数据库,它的结构将与旧的数据库不同。例如,旧数据库可能有一个类似于
id | first_name | last_name
新数据库有一个类似于
id | whole_name
因为旧的数据库最终不会用于这个应用程序,所以我想构建模型,以便“切换”尽可能简单。
实际上,我需要能够从旧数据库中读取数据,并使用
person
方法(假设我已经编写了它),根据新数据库填写模型。然后,在写入数据时,它被写入两个数据库,使用person
方法转换为旧结构。因此,我需要以下几点。
任何读取操作(如
transform
或detransform
)从旧数据库中获取数据,将其转换为新的数据库结构,并填充模型实例任何写操作(如
query
)都会将数据写入两个数据库:对于新数据库是这样,对于旧数据库是detransform的结果我希望这对模型尽可能透明,这样以后,当我们只需要新的数据库时,尽可能少的代码需要更改
通常,我现在的想法是为所有的旧表编写模型。然后为新模型编写一个抽象基类,该基类重写
all
方法并定义一个自定义管理器(例如,它重新实现save
方法)。然后新表的所有模型都继承自这个基类。当我们准备切换到只使用新的数据库时,我们只需将基类设为存根。这样做对吗?有更好的方法吗?我试过查看数据库路由器,但它们似乎只在表结构相同时才起作用。
最佳答案
一个应用程序可以使用几个数据库。
我建议您同时定义两个模型并重新定义模型到旧数据库的保存方法和模型到新数据库的创建方法(它允许您在执行保存到旧数据库的操作时创建新模型实例并将其保存到新数据库)。
稍后您只需删除代码(对旧模型使用的地方进行小的重构)。