gpt4 book ai didi

python - Django:对模型使用两个不同的数据库,具有两种不同的结构

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:00 24 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

6年前关闭。




Improve this question




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

id | first_name | last_name

并且新数据库有 person表一样
id | whole_name

因为这个应用程序最终不会使用旧数据库,所以我想构建模型,以便“切换”尽可能容易。

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

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

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

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

    最佳答案

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

    关于python - Django:对模型使用两个不同的数据库,具有两种不同的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33859186/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com