Django: как использовать несколько баз данных? - PullRequest
1 голос
/ 22 января 2020

Я создаю веб-сайт с Django, и мне нужно иметь атрибут GPS-координаты в моей User модели.

Я буду использовать Geo Django, для которого требуется PostgreSQL, и, поскольку мой веб-сайт уже работает с базой данных sqlite3 по умолчанию, мне нужно установить базу данных PostgreSQL в проект, чтобы создать модель Coordinates в нем и связать ее с моделью User базы данных SQLite.

Я нашел много учебных пособий по inte rnet о "как использовать несколько баз данных" , но все они очень просты. Поскольку я довольно новичок в Django и веб-программировании, мне нужно подробное руководство по нескольким базам данных. У меня есть несколько вопросов, и я заранее благодарю вас, если вы можете ответить на один или несколько из них!

Примечание: я использую windows 10 с PostgreSQL, установленным с приложением ubuntu из windows.

1) Как создать и инициализировать файл для новой базы данных в проекте Django? Файл db.sqlite3 был автоматически создан при инициализации проекта Django, так как я могу создать еще один?

2) Нужно ли использовать новое приложение для координат GPS или использовать существующее? ?

3) Как я могу установить связь OneToOne между моей User моделью и моей Coordinates моделью, которая будет в другой базе данных?

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Вы не можете просто создать файл базы данных. за исключением SQL lite, который является очень простой базой c и не может использоваться в рабочей среде, другие базы данных обычно поставляются со встроенными серверами и не имеют файла, который вы можете увидеть. вы можете использовать несколько баз данных, либо у вас есть модели в разных приложениях, либо вам нужны определенные таблицы c, чтобы быть в другой базе данных. но Django не поддерживает связи между базами данных!

см. дополнительную информацию:

Django 1.11. Можем ли мы создать отношения между таблицами из двух разных баз данных?

1 голос
/ 23 января 2020

Как @NalinDobhal упоминает в комментариях:

Связи между базами данных

Django не ' В настоящее время не предоставляется поддержка внешних ключей или отношений «многие ко многим», охватывающих несколько баз данных. Если вы использовали маршрутизатор для разделения моделей на разные базы данных, любые внешние ключи и отношения «многие ко многим», определенные этими моделями, должны быть внутренним для одной базы данных.

На мой взгляд, у вас есть 2 варианта:

  1. Установить SpatiaLite и продолжить использовать SQLite для своего проекта, включение пространственных типов в существующей БД ( следуйте документированным Geo Django инструкциям по данному вопросу )
  2. Предпочтительное решение: Миграция существующей БД SQLite в PostgreSQL и включите PostGIS. Вы можете отлично прочитать, почему это предпочтительнее и как правильно выполнить миграцию с помощью Django в этой статье .

Короткая история предпочтительного процесса:

  • Создайте дамп БД из существующей БД:

    python manage.py dumpdata > datadump.json
    
  • Войдите в оболочку Django и удалите существующую ContentType данные

    python manage.py shell
    
    >>> from django.contrib.contenttypes.models import ContentType
    >>> ContentType.objects.all().delete()
    >>> quit()
    
  • Загрузить файл дампа в PostgreSQL DB:

    python manage.py loaddata datadump.json
    

Примечание : Этот процесс перехода не только с SQLite на PostgreSQL специфицирует c и может использоваться практически при каждой миграции между БД (что я знаю об ATM).

...