【问题标题】:Django routing to database based on model tableDjango基于模型表路由到数据库
【发布时间】:2013-11-23 04:52:15
【问题描述】:

我有一个包含两个数据库的 Django (1.6) 项目。我有一个带有一个模型和多个表的应用程序。

我想使用数据库路由器将模型中的特定表设置为特定数据库。我找到的所有文档似乎都解释了如何将特定应用程序路由到特定数据库。

【问题讨论】:

    标签: django django-models django-database


    【解决方案1】:

    看起来您可以为此使用自定义路由器和模型属性。

    YMMV:还没有测试过。

    https://docs.djangoproject.com/en/dev/topics/db/multi-db/#using-routers

    class MyModel(models.Model):
        _DATABASE = "foo"
    
    class CustomRouter(object):
        def db_for_read(self, model, **hints):
          database = getattr(model, "_DATABASE", None)
          return database
        # repeat for db_for_write, etc.
    

    【讨论】:

    • 感谢您的回复@AKX。 “_DATABASE”是指表的名称吗?因此,如果我将所有表名命名为 name_DATABASE(其中 database 是我的另一个数据库的名称),它会以这种方式检测到它吗?你知道我是否可以只引用路由器中的表名吗?
    • _DATABASE 的值仅引用在DATABASES 设置条目中声明的数据库名称。你可以从model._meta.db_table找出表名。
    • 这在 Django 1.11 中似乎不起作用。我在模型中添加了模型属性 DATABASE_NAME,但就我的自定义数据库路由器而言,它不存在。
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2012-03-28
    • 2011-12-24
    相关资源
    最近更新 更多