Django по умолчанию db.sqlite3, если ваша пользовательская база данных не найдена

Скажем, у меня есть эта действительно рад база данных, которую я использую с Django, но для целей отладки я хочу использовать базу данных по умолчанию `db.sqlite3 'в файле settings.py, если моя база данных рада не найдена или пользователи не способный легко настроить базу данных.

Как я могу выполнить эту задачу с помощью Django?

2 ответа

То, как я это делаю, таково:

В settings.py:

import dj_database_url # you'll need this in requirements.txt
DATABASES = {
 "default": dj_database_url.config(default='sqlite:///db.sqlite3'),
}

Если переменная окружения DATABASE_URL установлена, как и в процессе производства (Heroku для меня, но вы можете использовать переменную enb DATABASE_URL в любом месте), используйте ее. В противном случае вернитесь к sqlite

Кроме того, в конце settings.py у меня есть:

# Import optional local settings. This must be at the END of this file.
try:
 from .local import *
except ImportError:
 pass

Таким образом, вы можете переопределить базу данных sqlite двумя способами: вы можете установить переменную среды DATABASE_URL или создать файл "local.py" (исключить это из контроля версий через .gitignore), который переопределяет ее и другие выборочно. Почему два пути? Прежде всего потому, что большинство разработчиков моей команды более удобны в управлении локальным файлом настроек, чем переменные среды.

Я использую эту философию для всех моих настроек, которые могут различаться между dev и production, или которые содержат что-то, что я не хочу в управлении источником по любой другой причине.


Вы можете, например, установить дезадаптацию базы данных вашего отладочного var. В файле настроек:

if DEBUG:
//test database using sqlite
 DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(BASE_DIR, 'you_db_name.sqlite3'),
 }
 }
else:
 //here your prod database

licensed under cc by-sa 3.0 with attribution.