Django - 每个模型1个数据库?

时间:2016-02-20 12:30:56

标签: python django database nosql

我找到了同样的问题,但没有找到真正的答案(只是让我们看看DATABASE_ROUTERS ......):see here

所以我解释一下: - 我有2个模型A和B(A类......在model.py中的B类) - 我有2个数据库(db1是一个SQL数据库,db2是一个NoSQL数据库) - 我只有1个应用程序 - 模型A必须仅在db1上,模型B必须仅在db2上

我想做“makemigrations - db = db1”然后“migrate - db = db1”并且看到只为数据库db1准备了迁移并且只创建了模型A,同样的事情是db2和B

有可能用django ??

2 个答案:

答案 0 :(得分:2)

Django无法拆分应用程序数据库之间的迁移,请参阅https://docs.djangoproject.com/en/1.9/topics/db/multi-db/#allow_migrate

您有几种选择:

  1. 让django将所有模型迁移到两个数据库,然后在每个数据库上将一个表保留为空。您将需要一个基于行的数据库路由器,并向路由器提示该对象所属的数据库。与迁移不同,读/写路由确实提供了基于模型决定数据库的选项(而不仅仅是应用程序)。

  2. 与1相同,但为了安全起见,在database2上为表A运行自定义DROP TABLE语句,在数据库1上为表B运行自定义DROP TABLE语句。如果出现一些路由错误,则会出现异常

  3. 拆分您的应用。虽然django适合在同一个应用程序中将数据和功能结合在一起,但您可以在需要时拆分应用程序。在你的情况下,分为三个:

    • app1与模特A
    • app2 with model B
    • app3,其中包含将访问app1,app2中的数据库图层的视图,网址,测试等。
  4. 请参阅Django models across multiple projects/microservices. How to?

答案 1 :(得分:1)

看起来有可能。 您应该在设置DATABASES中设置所有数据库。 之后,您可以编写自定义数据库路由器,如下所述:https://docs.djangoproject.com/en/1.9/topics/db/multi-db/#using-routers

但我相信你已经准备好了。 更有趣的问题是关于mirations?看起来有一个选项 - 从这里allow_migratehttps://docs.djangoproject.com/en/1.9/topics/db/multi-db/#an-example 我会尝试在这里放置自定义逻辑来处理数据库管理到正确的数据库中。