如何在Django 1.11中使用settings_local.py覆盖settings.py

时间:2017-05-11 09:32:54

标签: python django postgresql

我是Django 1.11.1中的新手

我想问一下如何用settings.py

覆盖settings_local.py

settings.py 中我有:

...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
...
try:
   from settings_local import *
except ImportError:
   pass

settings_local.py 中我有:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'DB_NAME',
        'USER': 'USER_NAME',
        'PASSWORD': 'PASSWORD',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

但每次我python manage.py migrate时,该表格仅在sqlite3中创建,而不是postgresql

我已经尝试查找并使用其他用户已经提供的解决方案并已安装psycopg2,但仍然无法做到。我的设置有问题吗?

此致

5 个答案:

答案 0 :(得分:1)

这个怎么样?只需在您的设置中声明如下所示的DATABASES

DATABASES = {
    'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
         'NAME': database_name,
         'USER': database_user,
         'PASSWORD': database_password,
         'HOST': 'localhost',
         'PORT': '',
    }
}

在您的本地设置中,只需声明database_namedatabase_userdatabase_password

修改

如果你想将sqlite作为默认值,你可以定义一个default_settings.py并在其中加入sqlite声明。在你的settings.py导入这样。

try:
    from local_settings.py import *
except ImportError:
    from default_settings.py import *

如果您想使用postgres,只需在local_settings中声明它,但如果您的伙伴想要使用sqlite,则导入default_settings,将sqlite定义为默认数据库。

答案 1 :(得分:1)

为此我只使用这个包https://github.com/joke2k/django-environ。 另一个人认为,我建议您在生产和部署中使用相同的引擎,因为如果您在使用Sqlite部署到生产时使用postgres进行开发时可能会出现错误,因为postgres在django中有更多功能,而且这样的错误非常严重难以在部署中调试

答案 2 :(得分:1)

因为我使用python 3可能代码变得有点严格,我只需要在.之前添加settings_local

try:
    from .settings_local import *
except ImportError:
    pass

答案 3 :(得分:0)

您无需创建另一个'settings_local.py'文件来更改您的公正数据库设置。

您可以直接在settings.py文件中添加设置,将数据库设置为PostgreSQL。请查看以下代码:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myshopdb',                      # Your database name which you have dreated using command line in PostgreSQL
        'USER': 'admin',                      # Your username which you have created in PostgreSQL for your db.
        'PASSWORD': '',                  # Your password.
        'HOST': 'localhost',                      # Set to empty string for localhost.
        'PORT': '',                      # Set to empty string for default(8000).
    }
}

它应该有用。

不要忘记使用virtualenv运行您的项目。它将帮助您在程序包安装期间保护项目。

感谢。

答案 4 :(得分:0)

对我而言,解决方案应该有效。可能的情况是ImportError。有多种情况应该导致此

  1. 如果文件不存在(那就是你放try except的原因)
  2. settings_local中的一些错误(settings_local中的随机导入),例如

    import notinstalledmodule 
    
  3. 所以第二种情况也导致ImportError你正在捕捉。所以为了调试这个,删除try except并让它工作(因为你有本地文件)。