Я создаю сайт, на котором работает Django, и я хочу иметь отдельные базы данных для некоторых приложений, я создаю гибкий маршрутизатор, который направляет каждое приложение в предопределенную базу данных, это отлично работает. Проблема в том, что когда я переношу свои модели, я должен каждый раз устанавливать параметр --database
, и я нахожу это раздражающим и избыточным. Также много раз я заливал свою базу данных по умолчанию таблицами из перенесенного приложения (забыв добавить --database
). Я экспериментировал с функцией allow_migrate(...)
в своем маршрутизаторе, но все, что я мог достигнуть, это механизм безопасности, который не будет запускать миграцию, если я забуду указать базу данных. Мой вопрос: есть ли способ настроить автоматический выбор базы данных для миграции моделей в Django? Мой подход может быть неправильным, меня удивляет, что никто, кажется, не делал этого раньше.Автоматический маршрутизатор db для миграции в django
ответ
Я не знаю, как это сделать автоматически. Однако простой подход может заключаться в write your own version команды migrate
, которая несколько раз вызывает команду Django migrate
с соответствующими аргументами --database
и app.
По словам автора миграции Django, это a conscious design decision, поэтому я не ожидал, что он изменится: «Так же, как syncdb, миграция выполняется только по одной базе данных за раз, поэтому вы должны выполнить ее индивидуально для каждой базы данных , как вы предлагаете. Это по дизайну ».
Для тех, кто сталкивается вопрос у меня был, вот что я, наконец, остановились на:
routers.py:
from django.conf import settings
class DatabaseAppsRouter(object):
def db_for_read(self, model, **hints):
# your db routing
def db_for_write(self, model, **hints):
# your db routing
def allow_relation(self, obj1, obj2, **hints):
# your db routing
def allow_syncdb(self, db, model):
# your db routing
def allow_migrate(self, db, app_label, model_name=None, **hints):
if db in settings.DATABASE_APPS_MAPPING.values():
return settings.DATABASE_APPS_MAPPING.get(app_label) == db
elif app_label in settings.DATABASE_APPS_MAPPING:
return False
settings.py
DATABASE_ROUTERS = ['project.routers.DatabaseAppsRouter']
DATABASE_APPS_MAPPING = {'contenttypes': 'default',
'auth': 'default',
'admin': 'default',
'sessions': 'default',
'messages': 'default',
'staticfiles': 'default',
'myapp': 'mydb',
}
Эта настройка позволяет мне запускать два компьютера Mands:
python manage.py migrate
python manage.py migrate --database=mydb
который еще один ко многим, но по крайней мере теперь я не могу ошибочно перенести MyApp в базу данных по умолчанию, которое произошло еще раз, что я хочу признать.
Предупреждение - декламация:
До этого момента я находил дизайн Django быть quircky, но очень логично и программист дружественные, как и сам питон. Но способ, которым миграция взаимодействует с несколькими настройками базы данных, на самом деле неудобен, настолько легко наполнить базу данных по умолчанию нежелательными таблицами. Обсуждение, связанное кевином в его ответе, показывает, что я не единственный, у кого есть такие трудности.
- 1. Как использовать DB-маршрутизатор в Django 1.4
- 2. Поддерживает ли Django миграции миграции
- 3. Ошибка миграции Django datetime
- 4. Инструменты поддержки миграции миграции JPA live db?
- 5. Django Миграции
- 6. Полезность db миграции отката
- 7. проблема миграции django NodeNotFoundError
- 8. Сломанные миграции в Django
- 9. Fake миграции Django (в самой миграции)
- 10. Запуск миграции django на windows для удаленных mssql db с родными драйверами db windows
- 11. Сделать миграции Условное в Django
- 12. Джанго DB проблема миграции: несуществующей атрибут
- 13. Django: loaddata в ошибках миграции
- 14. Развернутый маршрутизатор Django REST
- 15. Перспективы миграции agnostic db для будущих моделей
- 16. DB обновления и DB миграции (MSSQL)
- 17. Автоматический вход в Django 1.8
- 18. Резервное копирование localdb для миграции db
- 19. Зачем использовать юг для миграции в Django?
- 20. Создания миграции для Идентов приложения в Django
- 21. Какова команда для принудительной миграции в Django?
- 22. Heroku: ошибка выполнения миграции django
- 23. Автоматический автор в Django admin
- 24. Ошибка Django MySQL при миграции
- 25. Положения Django: добавление миграции миграции PositionField
- 26. Запуск DB-миграции из приложения
- 27. Изменения миграции миграции Django 1.7.2 постоянно обнаруживаются
- 28. Преобразование индексов postgresql в миграции Django
- 29. Flyway не находит мои миграции sql в db/миграции
- 30. Проверка ожидающих миграции Django
Спасибо за ссылку на обсуждение этой темы, кажется, что дизайн подсистем db/migrations не позволяет использовать мое предпочтительное решение. Я попробую ваше предложение. – Raff89