【问题标题】:Connect to a different database in django shell在 django shell 中连接到不同的数据库
【发布时间】:2016-07-12 14:38:01
【问题描述】:

在 Django shell 中如何连接到不同的数据库?

类似:

python manage.py shell --database=slave

我尝试用谷歌搜索,但找不到任何有用的东西。

这是我的设置的样子:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db1',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': '10.10.10.10',
        'PORT': '',
        'CONN_MAX_AGE': 1000,
    },
    'slave':{
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db2',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': '10.10.10.10',
        'PORT': '',
        'CONN_MAX_AGE': 1000,
    },
}

【问题讨论】:

    标签: python django shell


    【解决方案1】:

    您可以使用using() ORM 的方法在查询中选择数据库:

    # This will hit a model in your default DB:
    Model.objects.using('default').all()
    
    # And this will hit a model in your slave DB:
    Model.objects.using('slave').all()
    

    【讨论】:

    • 是的,这出现在我的搜索中,但我计划在从属服务器上运行大量查询,因此正在寻找更好的方法。另一种方法是使用不同的设置文件,这似乎是更好的主意,因为我以后可能想在另一个从属设备上运行它。想检查我正在寻找的内容是否得到直接支持。无论如何,谢谢和 +1。
    【解决方案2】:

    您可以将设置模块拆分为子模块。例如:

    project/
        settings/
            __init__.py
            base.py
            dev.py
            prod.py
            shell.py
    

    您的主要/常用设置位于project/settings/base.py

    在开发中,将DJANGO_SETTINGS_MODULE环境变量设置为project.settings.dev

    project/settings/dev.py 可能看起来像:

    from .base import *
    
    DEBUG = True
    

    project/settings/shell.py 可能看起来像:

    from .dev import *
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'db2',
            'USER': 'user',
            'PASSWORD': 'password',
            'HOST': '10.10.10.10',
            'PORT': '',
            'CONN_MAX_AGE': 1000,
        },
    }
    
    # OR
    #
    # DATABASES['master'] = DATABASES['default']
    # DATABASES['default'] = DATABASES['slave']
    

    然后运行python manage.py shell --settings=project.settings.shell


    或者,或者,只需创建第二个设置模块:

    project/
        settings.py
        shell_settings.py
    

    project/shell_settings.py 看起来像:

    from .settings import *
    
    DATABASES['master'] = DATABASES['default']
    DATABASES['default'] = DATABASES['slave']
    

    然后运行python manage.py shell --settings=project.shell_settings

    【讨论】:

      【解决方案3】:

      您还可以使用django.db 中的connection 模块来创建/连接到全新的测试数据库。

      from django.db import connection
      db = connection.creation.create_test_db()
      

      我知道这不是所要求的,但它在测试时很有帮助且快速。它将创建一个新的测试数据库并将您连接到它。我还没有弄清楚如何使用它连接到现有数据库,但请继续关注。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-21
        • 2013-02-07
        • 2012-05-04
        • 2017-12-06
        • 1970-01-01
        • 2018-02-09
        • 1970-01-01
        • 2018-10-12
        相关资源
        最近更新 更多