Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django 1.11中使用settings_local.py覆盖settings.py_Python_Django_Postgresql - Fatal编程技术网

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

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

我是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 *
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
。有多个情况会导致这种情况

  • 如果文件不在那里(这就是为什么要放置
    尝试除外
  • 设置\u local中的某些错误(在设置\u local中随机导入),如


  • 因此,第二种情况也会导致您捕获的
    ImportError
    。因此,为了调试此问题,请删除
    try except
    ,并使其正常工作(因为您有本地文件)。

    对于我来说,您的解决方案应该有效。可能的情况是
    importorror
    。有多个情况会导致这种情况

  • 如果文件不在那里(这就是为什么要放置
    尝试除外
  • 设置\u local中的某些错误(在设置\u local中随机导入),如


  • 因此,第二种情况也会导致您捕获的
    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”。