Как сделать два проекта django одной и той же базой данных

Мне нужно, чтобы два отдельных проекта Django имели одну и ту же базу данных. В project_1 меня есть модели, создающие объекты, которые мне нужно использовать в project_2 (в основном изображения).

Древовидная структура project_1_2 :

 project_1/ manage.py settings.py project_1_app1/ ... ... project_2/ manage.py settings.py project_2_app1/ ... ... 

Какой подход лучше всего подходит?

EDIT : Я использую sqlite3 в своей среде разработки.

Я бы хотел, чтобы мои два проекта django были автономными проектами (чтобы обе они могли безопасно обновляться из соответствующих репозиториев).

 # in project_1/settings.py import os PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) .. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(PROJECT_ROOT, 'development.db'), }, } ... # in project_2/settings.py import os PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) .. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(PROJECT_ROOT, 'development.db'), }, } ... 

Таким образом, каждый проект имеет свой собственный development.db (тот, который мне нужно разделить):

 project_1/development.db project_2/development.db 

но я думаю, мне нужно сделать что-то еще, чтобы сделать его общим (и уникальным). Лучшим для меня было бы сохранить development.db в проекте_1 / path и, таким образом, установить для параметра project_2 / settings.py DATABASES пункт project_1 / development.db .

One Solution collect form web for “Как сделать два проекта django одной и той же базой данных”

Вы можете просто определить одну и ту же базу данных в DATABASES в своих settings.py. Итак, если ваша база данных PostgreSQL, вы можете сделать что-то вроде этого:

 # in project_1/settings.py DATABASES = { 'default': { 'NAME': 'common_db', 'ENGINE': 'django.db.backends.postgresql', 'USER': 'project_1_user', 'PASSWORD': 'strong_password_1' }, } # in project_2/settings.py DATABASES = { 'default': { 'NAME': 'common_db', 'ENGINE': 'django.db.backends.postgresql', 'USER': 'project_2_user', 'PASSWORD': 'strong_password_2' }, } 

Обратите внимание, что оба пользователя базы данных ( project_1_user и project_2_user ) должны иметь соответствующие привилегии в базе данных, которую вы хотите использовать. Или вы могли бы использовать одного и того же пользователя для обоих проектов.

Если вы хотите иметь не одну базу данных для каждого проекта, вы должны взглянуть на документы для нескольких баз данных .

По другому вопросу, поскольку вы обмениваетесь данными, я думаю, вы также разделяете функциональные возможности. Так, например, если project_1_app1 и project_2_app1 выполняют те же (или подобные) вещи, похоже, они могут вместо этого быть одноразовым приложением .

редактировать

Поскольку вы используете sqlite3, вы должны убедиться, что путь, который вы используете, тот же. Итак, предполагая, что project_1 и project_2 являются братьями и сестрами, например:

 projects project_1 settings.py ... project_2 settings.py ... 

вы должны попробовать следующее:

 # project_1/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(PROJECT_ROOT, 'development.db'), }, } # project_2/settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join( os.path.dirname(os.path.dirname(PROJECT_ROOT)), 'project_1', 'development.db' ), }, } 

Это даст структуру, которую вы просите. Обратите внимание, однако, что проекты не являются «автономными». project_2 явно зависит от базы данных project_1 .

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

  • Как ограничить размер загружаемого файла apache + django
  • Django REST Framework - Сериализация необязательных полей
  • Django - удаление объекта, сохранение родителя?
  • Python / Django импортирует неправильный модуль (относительный, когда он должен быть абсолютным)
  • Ошибка пользовательской команды Django: непризнанные аргументы
  • Команда управления Django ImportError
  • Дублирование экземпляров модели и связанных с ними объектов в Django / Algorithm для повторного дублирования объекта
  • Django / Python assertRaises с проверкой сообщений
  • Python - лучший язык программирования в мире.