当前位置: 首页 > 编程笔记 >

Django 添加数据库路由文件

蒋航
2023-03-14
本文向大家介绍Django 添加数据库路由文件,包括了Django 添加数据库路由文件的使用技巧和注意事项,需要的朋友参考一下

示例

要在Django中使用多个数据库,只需在中指定每个数据库settings.py:

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'django_db_user',
        'PASSWORD': os.environ['LOCAL_DB_PASSWORD']
    },
    'users': {
        'NAME': 'remote_data',
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'remote.host.db',
        'USER': 'remote_user',
        'PASSWORD': os.environ['REMOTE_DB_PASSWORD']
    }
}

使用dbrouters.py文件来指定对于每种数据库操作类,哪些模型应在哪些数据库上进行操作,例如,对于存储在中的远程数据remote_data,您可能需要以下内容:

class DbRouter(object):
    """
    A router to control all database operations on models in the
    auth application.
    """
    def db_for_read(self, model, **hints):
        """
        Attempts to read remote models go to remote database.
        """
        if model._meta.app_label == 'remote':
            return 'remote_data'
        return 'app_data'

    def db_for_write(self, model, **hints):
        """
        Attempts to write remote models go to the remote database.
        """
        if model._meta.app_label == 'remote':
            return 'remote_data'
        return 'app_data'

    def allow_relation(self, obj1, obj2, **hints):
        """
        Do not allow relations involving the remote database
        """
        if obj1._meta.app_label == 'remote' or \
           obj2._meta.app_label == 'remote':
           return False
        return None

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        """
        Do not allow migrations on the remote database
        """
        if model._meta.app_label == 'remote':
            return False
        return True

最后,将您添加dbrouter.py到settings.py:

DATABASE_ROUTERS = ['path.to.DbRouter', ]
           

 类似资料:
  • 问题内容: 我一直在使用手动数据库选择来处理具有两个独立数据库的项目。我已经在设置中定义了数据库。 进一步阅读之后,看来数据库路由实际上是解决问题的方法。但是,在阅读了文档和此处的一些相关文章之后,我比以往更加困惑。 在我的设置中,我有: 我知道我必须像这样定义路由器类(我认为在文件中): 那呢 每个模型都需要一个还是自动的?除此之外,我仍然得到一个错误: django.core.exceptio

  • 我想在定义路线时向路线添加一些自定义数据。 我该怎么做? 比如: 我不希望自定义数据显示在URL中。我只是在内部使用它。

  • 我现在已经在camel中做了一些小项目,但有一件事我很难理解,那就是当在camel路线上消费时,如何处理大数据(这不适合内存)。 我有一个包含几GB数据的数据库,我想使用骆驼进行路由。显然,将所有数据读入内存不是一种选择。 如果我是作为一个独立的应用程序这样做的,我会有代码来分页数据并将块发送到我的JMS enpoint。我想使用骆驼,因为它提供了一个很好的模式。如果我从文件中消费,我可以使用流(

  • 问题内容: 在我的Django项目中,我对第三方应用程序具有依赖性,该第三方应用程序在具有已知模式的各个目录中生成SQLite缓存文件。 我想使用Django模型来访问这些数据库,但是显然我不能使用静态DATABASES设置。 如何在任意路径上动态打开SQLite数据库? 编辑 正如Byron Ruth所指出的,解决方案是将django.db.connections结合使用usingQuerySe

  • 问题内容: Upload.php: 这是表格(在单独的文件中): 错误是 ($ Filename = $ _ POST [‘Filename’];) 和 (回显“文件“。basename($ _FILES [‘uploadedfile’] [‘Filename’])。”已经上传,并且您的信息已添加到目录中“;) 给我: 问题答案: 首先,您应该使用它进行调试,然后查看其中包含的内容。: 您将看起来