我是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
,但仍然无法做到。我的设置有问题吗?
此致
答案 0 :(得分:1)
这个怎么样?只需在您的设置中声明如下所示的DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database_name,
'USER': database_user,
'PASSWORD': database_password,
'HOST': 'localhost',
'PORT': '',
}
}
在您的本地设置中,只需声明database_name
,database_user
,database_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
。有多种情况应该导致此
try except
的原因)settings_local中的一些错误(settings_local中的随机导入),例如
import notinstalledmodule
所以第二种情况也导致ImportError
你正在捕捉。所以为了调试这个,删除try except
并让它工作(因为你有本地文件)。