Предотвратить syncdb от обновления базы данных в Django? - PullRequest
3 голосов
/ 14 августа 2010

Я бы хотел относиться к базе данных как к «только для чтения» и никогда не писать в нее. Есть ли способ, позволяющий легко запретить syncdb проверять обновление базы данных?

С Django 1.2 и возможностью иметь несколько баз данных, он хотел бы иметь возможность запрашивать информацию в базе данных. Мне никогда не нужно было бы писать в эту базу данных.

Однако мне было бы страшно, если бы syncdb запустился и попытался обновить эту базу данных (потому что у меня может не быть технически доступной только для чтения учетной записи для этой базы данных). В основном, я просто хотел бы использовать / злоупотреблять Django ORM как способ запроса этой базы данных.

ОБНОВЛЕНИЕ: Извините, мне нужно иметь возможность синхронизировать одну из баз данных в settings.py, только не эту конкретную.

Ответы [ 3 ]

4 голосов
/ 14 августа 2010

Хех, наверное, я отвечу на свой вопрос (RTFM!) ...

http://docs.djangoproject.com/en/dev/topics/db/multi-db/#an-example

def allow_syncdb(self, db, model):
     ...

Это определенное начало ...

1 голос
/ 14 августа 2010

Если вам не нужно syncdb, не запускайте его, просто так. Обновление базы данных - это то, что она делает, поэтому, если вам это не нужно, вы не должны запускать ее - она ​​больше ничего не делает.

Однако, если вы на самом деле спрашиваете, как вообще не запускать syncdb, одна из возможностей - определить «пустую» команду syncdb внутри одного из ваших приложений. Следуйте инструкциям пользовательской команды управления , но просто поместите pass в метод handle команды. Django всегда сначала найдет вашу версию команды, что делает ее неактивной.

0 голосов
/ 22 сентября 2014

Эта проблема возникла у меня при работе с зеркалами только для чтения баз данных Microsoft SQL Server (уххх). Поскольку вы не можете выборочно запускать syncdb в одном приложении или базе данных. Но у вас есть для запуска syncdb, когда вы впервые создаете новый проект Django или устанавливаете новое приложение, которое требует его (например, south). Я поместил свою базу данных только для чтения в собственное приложение Django, а затем добавил в нее пустую миграцию на юг. Таким образом, syncdb считает, что юг обрабатывает настройку БД для этих приложений, а south ничего с ними не делает!

manage.py schemamigration ap_with_read_only_database --empty initial_empty_migration_that_does_nothing

Это дает вам свободу управлять схемой этой базы данных вне django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...