Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
对Django本地和服务器上的Postgres使用SQLite_Django_Database_Postgresql_Sqlite - Fatal编程技术网

对Django本地和服务器上的Postgres使用SQLite

对Django本地和服务器上的Postgres使用SQLite,django,database,postgresql,sqlite,Django,Database,Postgresql,Sqlite,我从Django开发作为一个爱好项目开始。到目前为止,我在开发(即使用py manage.py runserver)和部署(在Nginx+uWSGI上)中愉快地使用了SQLite。现在我还想学习使用更健壮的PostgreSQL数据库。但是,如果可能的话,我想跳过本地安装,以避免在Windows上安装Postgres 我想知道,在部署中使用内置服务器和Postgres时,是否可以通过Django使用SQLite,而不更改项目代码。找不到该怎么做 我可以使用变通方法,使我的部署过程在每次部署时更改服

我从Django开发作为一个爱好项目开始。到目前为止,我在开发(即使用
py manage.py runserver
)和部署(在Nginx+uWSGI上)中愉快地使用了SQLite。现在我还想学习使用更健壮的PostgreSQL数据库。但是,如果可能的话,我想跳过本地安装,以避免在Windows上安装Postgres

我想知道,在部署中使用内置服务器和Postgres时,是否可以通过Django使用SQLite,而不更改项目代码。找不到该怎么做


我可以使用变通方法,使我的部署过程在每次部署时更改服务器上的设置。但这是一种黑客行为。

您可以将
设置.py
拆分到多个设置文件中,例如

[projectname]/
├── [projectname]/
│   ├── __init__.py
│   ├── settings/
│   │   │── base.py
│   │   │── development.py
│   │   │── production.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py
您的
base.py
包括当前设置.py中的所有代码。在
development.py
(sqlite3)和
production.py
(postgresql)中指定不同的数据库,并在每个数据库中导入
base.py

from .base import *
最后但并非最不重要的一点是,您必须告诉django应该使用哪个文件。加

export DJANGO_SETTINGS_MODULE="projectname.settings.development"
到您的开发服务器上的VirtualNV后期激活,然后

export DJANGO_SETTINGS_MODULE="projectname.settings.production"
在生产服务器上。别忘了

unset DJANGO_SETTINGS_MODULE
在你的反应前

更多信息如下:
顺便说一句,这是一个很好的教程,有很多最佳实践

settings.py
替换为

 settings/
     │── __init__.py
     │── base.py
     │── development.py
     │── production.py
\uuuu init\uuuuu.py中

import os

app_stage = os.environ.get('DJANGO_APP_STAGE', 'dev')
if app_stage == 'prod':
    from .production import *
else:
    from .development import *
最后,当您启动应用程序进行生产时,请确保设置了
env DJANGO\u app\u STAGE='prod'


在各自的文件中创建数据库设置,就可以了。

只需在开发机器上安装PostgreSQL即可。通过这种方式,您可以获取生产数据,并在本地复制和调试问题。在开发/测试和生产中使用不同的堆栈不是一个好主意。Django不会为您处理的数据库之间存在很多差异,因此您在生产过程中必然会遇到本地没有发生的问题。@mu_太短了,谢谢您的提醒。我的测试也在服务器上完成,因此它的配置几乎与生产相同。此外,对于这个项目的模式是非常简单的,所以我希望Django将管理。不过,我会注意问题,并会尽快切换。我甚至已经在考虑使用SQLite进行生产,以保持事物的等效性。