Django не использует базы данных из settings.py - PullRequest
0 голосов
/ 06 февраля 2020

Я через несколько недель в Python / Django и сталкиваюсь с досадной проблемой. У меня есть несколько существующих баз данных, настроенных в settings.py, все выглядит хорошо, я даже обращался к базам данных с помощью соединений []. Cursor ()

Но базы данных (и данные) не попадают в модели, которые я хочу использовать, несмотря на выполнение команд makemigrations и migrate. Я смог использовать py manage.py inspectdb --database-dbname и скопировал эту информацию о классе вручную в мой models.py, но это тоже не сработало (вводить py manage.py inspectdb сам по себе не вызывает эти базы данных Я был в состоянии просматривать только по этому расширению --database). Так что я в замешательстве, так как, кажется, я делаю все правильные шаги, но не могу использовать эти существующие базы данных в Django.

Любые другие советы и шаги, которые я могу предпринять, приветствуются!

1 Ответ

0 голосов
/ 06 февраля 2020

(Почти) все учебные пособия, примеры и сторонние приложения, которые вы найдете в inte rnet, и большая часть документации Django предполагает, что вы используете одну базу данных для своего приложения , Это потому, что довольно сложно и необычно использовать несколько баз данных в одном приложении.

Но не исключено использование нескольких баз данных, и документация содержит инструкции о том, как это сделать и что вас меняет » чтобы его заработало, нужно будет его настроить.

ИМО, это предварительные условия для использования нескольких баз данных в одном проекте:

  • Базы данных содержат явно не связанную информацию, т.е. вы выиграли не имеют SQL отношений между таблицами в разных базах данных. Одна база данных может содержать таблицу со столбцом, который сопоставляется со столбцом в таблице в другой базе данных, но они не являются явными (нет ForeignKey или ManyToManyField в ваших моделях).
  • Вам не нужно смешивать базы данных в одном запросе: это в основном вытекает из предыдущего условия. Это просто означает, что если вам нужно получить объекты из одной базы данных, которые зависят от строк, поступающих из другой базы данных, вы установите sh отношение в python. Например, выборка списка имен из одной базы данных и использование этого списка для фильтрации набора запросов в другой базе данных.

Например, если у вас есть база данных, которая содержит маршруты Strava (которые регулярно обновляются с помощью некоторый внешний механизм), а ваше приложение представляет собой более широкое приложение, которое помогает пользователям узнать их окрестности, где они могут порекомендовать места и вещи, которые можно сделать, предлагая список маршрутов с отправной точкой поблизости, возможно, вам захочется show.

Теперь, когда вы это знаете, путь к go описан в do c, указанном выше:

  • Создание маршрутизатора базы данных так что запросы для определенных моделей автоматически направляются в правильную базу данных. Например, Route.objects.filter(start_city=city) будет автоматически выбирать маршруты из базы данных маршрутов Strava.
  • Если вам нужно сохранить информацию о маршруте в вашем приложении, сохраните ее в модели в базе данных по умолчанию и используйте уникальный идентификатор маршрута. это будет отображаться в базе данных strava. Используйте отдельные запросы (без связей), чтобы получить информацию о конкретном c маршруте.

При этом, если база данных Strava не обновляется регулярно по 3-м каналам, и ее цель состоит в том, чтобы предварительно заполните базу данных по умолчанию, затем экспортируйте данные из базы данных Strava как json и импортируйте их в django дБ, используя manage.py loaddata или файл миграции , последний более гибкая структура файла json.

...