Python 如何在Django 1.11中使用settings_local.py覆盖settings.py
我是Django 1.11.1的新手 我想问一下如何用Python 如何在Django 1.11中使用settings_local.py覆盖settings.py,python,django,postgresql,Python,Django,Postgresql,我是Django 1.11.1的新手 我想问一下如何用设置\u local.py 在mysettings.py中,我有: ... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } ... try: from settings_local import * exc
设置\u local.py
在mysettings.py中,我有:
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
...
try:
from settings_local import *
except ImportError:
pass
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'DB_NAME',
'USER': 'USER_NAME',
'PASSWORD': 'PASSWORD',
'HOST': 'localhost',
'PORT': '5432',
}
}
在my设置\u local.py中,我有:
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
...
try:
from settings_local import *
except ImportError:
pass
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
,但仍然无法完成。我的设置有问题吗
关于,这个怎么样?只需在设置中声明如下所示的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database_name,
'USER': database_user,
'PASSWORD': database_password,
'HOST': 'localhost',
'PORT': '',
}
}
在本地设置中,只需声明数据库名称
,数据库用户
,数据库密码
编辑
如果希望使用sqlite作为默认值,可以定义一个默认的_settings.py并将sqlite声明放入其中。在你的settings.py中,像这样导入
try:
from local_settings.py import *
except ImportError:
from default_settings.py import *
如果您想使用postgres,只需在本地设置中声明即可,但如果您的合作伙伴想使用sqlite默认设置,则会导入将sqlite定义为默认数据库的设置。这是怎么回事?只需在设置中声明如下所示的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database_name,
'USER': database_user,
'PASSWORD': database_password,
'HOST': 'localhost',
'PORT': '',
}
}
在本地设置中,只需声明数据库名称
,数据库用户
,数据库密码
编辑
如果希望使用sqlite作为默认值,可以定义一个默认的_settings.py并将sqlite声明放入其中。在你的settings.py中,像这样导入
try:
from local_settings.py import *
except ImportError:
from default_settings.py import *
如果您想使用postgres,只需在本地设置中声明即可,但如果您的合作伙伴想使用sqlite,则会导入默认设置,该设置将sqlite定义为默认数据库。您无需创建另一个“settings\u 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
运行项目。它将帮助您在包安装期间保护项目
谢谢。您不需要创建另一个“settings\u 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
运行项目。它将帮助您在包安装期间保护项目
谢谢。为此,我只使用这个软件包。
另一种想法是,我建议您在生产和部署中使用相同的引擎,因为如果在使用Sqlite部署到生产环境时在开发中使用postgres,则可能会出现错误,因为postgres在django中具有更多功能,而类似的错误在部署中很难调试为此,我仅使用此包。
另一种想法是,我建议您在生产和部署中使用相同的引擎,因为如果在使用Sqlite部署到生产环境时在开发中使用postgres,则可能会出现错误,因为postgres在django中具有更多功能,并且类似的错误在部署中很难调试对于我来说,您的解决方案应该可以工作。可能的情况是
importorror
。有多个情况会导致这种情况
尝试除外)
因此,第二种情况也会导致您捕获的
ImportError
。因此,为了调试此问题,请删除try except
,并使其正常工作(因为您有本地文件)。对于我来说,您的解决方案应该有效。可能的情况是importorror
。有多个情况会导致这种情况
尝试除外)
因此,第二种情况也会导致您捕获的
ImportError
。因此,为了调试此情况,请删除try except
,并使其工作(因为您有本地文件)。由于我使用python 3,可能代码变得有点严格,我只需在设置\u local
之前添加
try:
from .settings_local import *
except ImportError:
pass
由于我使用的是python 3,可能代码变得有点严格,所以我只需在
设置\u local
之前添加
try:
from .settings_local import *
except ImportError:
pass
将导入放在数据库声明的顶部与您的问题无关,但这似乎是错误的方法;通常您会在开发中运行sqlite,在生产中运行postgres。@mohammad仍然只迁移到sqlite@DanielRoseman我更喜欢在本地和prodWell中运行postgresql,我也是。在这种情况下,为什么会有这种覆盖?为什么不在主设置文件中将其设置为postgres?将import放在数据库声明的顶部与您的问题无关,但这似乎是错误的方法;通常您会在开发中运行sqlite,在生产中运行postgres。@mohammad仍然只迁移到sqlite@DanielRoseman我更喜欢在本地和prodWell中运行postgresql,我也是。在这种情况下,为什么会有这种覆盖?为什么不在主设置文件中将其设置为postgres?我更喜欢在settings.py中使用sqllite,因为如果我的合作伙伴第一次使用它,他们不会意外地使用prod Database好的,在这种情况下,您可以在shell中运行命令来应用“django admin runserver--settings=mysite.settings”这样的设置,您可以在其中进行更改“mysite.settings”到“mysite.settings”。设置_local”。请检查:我更喜欢在settings.py中使用sqllite,因为如果我的合作伙伴第一次使用它,他们不会意外地使用prod Database好的,在这种情况下,您可以在shell中运行命令来应用设置,如“django admin runserver--settings=mysite.settings”,您可以在其中更改“mysite”。