【问题标题】:How to get Database details from settings.py如何从 settings.py 获取数据库详细信息
【发布时间】:2017-07-19 14:25:53
【问题描述】:

我是python的新手。我需要从另一个目录中的另一个文件访问一个 python 文件。特别是我希望能够看到这些数据库详细信息,它们位于名为 settings.py 的文件中:

DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dynamic',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '192.168.10.130',
    }
}

如何从另一个文件夹中的另一个文件将这个字典作为数据库访问?

我尝试过这样做(在我的其他项目中有效):

from django.conf import settings
dbHost = settings.DATABASES['default']['HOST']
dbUsername = settings.DATABASES['default']['USER']
dbPassword = settings.DATABASES['default']['PASSWORD']
dbName = settings.DATABASES['default']['NAME']

请帮助我。提前致谢。

【问题讨论】:

  • 没有遇到您的问题。你能多说 2 个项目(附例子)吗?
  • @Satevg 你还需要什么详细信息。我正在使用本教程来创建我的项目。 docs.djangoproject.com/en/1.10/intro/tutorial01/.And 我完成了本教程中的基本操作,然后我尝试获取数据库值
  • 你认为你为什么需要这个?数据库设置供 Django 内部使用,您不需要在视图中访问它们。
  • 是的,我知道这一点,我在视图页面中访问它,但我需要在我的项目中添加一个附加文件,并且在该文件中我需要访问数据库详细信息

标签: django python-2.7 settings


【解决方案1】:

如果你想在projectB中使用projectA.settings.DATABASES,那么你应该在projectB中添加projectA路径:

projectB/myfile.py:

import sys
sys.path.append( "/path/to/projectA" )
from projectA import settings

dbHost     = settings.DATABASES['default']['HOST']
dbUsername = settings.DATABASES['default']['USER']
dbPassword = settings.DATABASES['default']['PASSWORD']
dbName     = settings.DATABASES['default']['NAME']

【讨论】:

  • 感谢您的回答是正确的,因为首先我执行此方法。但我需要从 dango.conf 导入设置而不使用 sys.path
  • 因为当我给生产总是需要更改路径。为了避免我需要使用 djano.conf 或类似的方法动态访问该值
  • 您可以将相对路径附加到当前工作目录,这样它将在开发和生产中工作。否则,请在部署脚本中使用项目根变量。
【解决方案2】:
from django.conf import settings
settings.DATABASES
{'default': 
    {'ATOMIC_REQUESTS': False,
    'AUTOCOMMIT': True,
    'CONN_MAX_AGE': 3600,
    'ENGINE': 'django.db.backends.mysql',
    'HOST': '127.0.0.1',
    'NAME': 'proj',
    'OPTIONS': {'charset': 'utf8', 'sql_mode': 'traditional'},
    'PASSWORD': 'password',
    'PORT': '20306',
    'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None},
    'TIME_ZONE': None,
    'USER': 'root'}
}

【讨论】:

    【解决方案3】:

    您可以使用dj-database-url 从环境变量轻松加载数据库设置,而不是在 python 中硬编码您的凭据。

    另一种选择是使用 json.load() 和一个小的 json 文件。

    【讨论】:

      【解决方案4】:

      在项目2的settings.py中,可以将project1的设置文件导入为:

      import project1.settings
      

      然后将 DATABASES 初始化为:

      DATABASES = { 'default': project1.settings.DATABASES['default'] }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 2022-08-19
        • 2014-10-15
        • 1970-01-01
        相关资源
        最近更新 更多