Django基于模型表路由到数据库

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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,但就我的自定义数据库路由器而言,它不存在。

以上是关于Django基于模型表路由到数据库的主要内容,如果未能解决你的问题,请参考以下文章

基于当前用户登录的 Django 数据库路由

Django实践-03模型-01表生成模型+学科页面与教师页面编写

Django系列

Django基于PythonWeb的Django框架设计实现天天生鲜系统-3模型创建

Django中如何实现数据库路由?

Django之模型层(ORM相关知识)