Django:为模型

时间:2015-11-22 19:26:38

标签: python django database

我有一个遗留数据库,由几个遗留应用程序使用。我正在构建一个使用这个遗留数据库的新Django应用程序,但我也想开始构建自己的数据库,它将具有与旧数据库不同的结构。例如,旧数据库可能有person表,如

id | first_name | last_name

并且新数据库有一个person表,如

id | whole_name

因为旧数据库最终不会用于此应用程序,所以我想构建模型以便"切换"在路上尽可能轻松。

基本上,我需要能够从旧数据库中读取数据,并使用transform方法(假设我已经编写过),根据新数据库填写模型。然后,在写入数据时,它会被写入两个数据库,使用detransform方法转换为旧结构。

因此,我需要以下内容。

  • 任何读取操作(如queryall)都会从旧数据库中获取数据,将其转换为新的数据库结构,并填充模型实例
  • 任何写入操作(如save)都会将数据写入两个数据库:新数据库的原样,以及旧数据库的detransform结果
  • 我希望这对模型尽可能透明,以便稍后,当我们只需要新数据库时,尽可能少的代码需要更改

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

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

1 个答案:

答案 0 :(得分:0)

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