能够检查数据库连接主机或名称(不是数据库名称,但设置)? Django的

时间:2018-01-05 23:57:43

标签: python mysql django database settings

我没有尝试检查连接的数据库名称,我在django中有多个数据库设置,并且还使用database route创建了failover,但我想知道我是否可以获得该名称连接主机或给设置的名称......

例如

DATABASES = {
    'default': {  # trying to get this name 'default'
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'euser',
        'PASSWORD': 'password',
        'HOST': 'host', # trying to get this host name 'host'
        'PORT': 3306,
    },
    'node2': {  # trying to get this name 'node2'
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'euser',
        'PASSWORD': 'password',
        'HOST': 'host2',  # trying to get this host name 'host2'
        'PORT': 3306,
    },
}

是否有可能获得我上面评论过的那些名字? 对于我的故障转移,我正在尝试发送一封电子邮件,如果正在使用另一个数据库,但如果我能够特别使用host这将会很好,所以对我来说会更容易

P.S。关于主题,是否可以将名称default更改为其他名称?我尝试改变它,我会得到错误。好像我必须至少有一个名为default的数据库设置名称

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

所以,做:

import pprint  # Makes it sooo pretty :)
from django.db import connection
print(pprint.pformat(connection.settings_dict))

将为您提供当前的连接设置。例如,上面的代码应该打印出类似的东西:

{'ATOMIC_REQUESTS': False,
 'AUTOCOMMIT': True,
 'CONN_MAX_AGE': 600,
 'ENGINE': 'django.db.backends.postgresql',
 'HOST': 'localhost',
 'NAME': 'stack_overflow',
 'OPTIONS': {},
 'PASSWORD': '***',
 'PORT': '5432',
 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None},
 'TEST_NAME': 'stack_overflow_test',
 'TIME_ZONE': None,
 'USER': 'postgres'}

因此,您应该只需执行connection.settings_dict['HOST']

即可访问主机名