2010-08-13 3 views
3

Я хотел бы уважать базу данных как «только для чтения» и никогда не писать ей. Есть ли способ легко предотвратить синхронизацию даже от необходимости проверять обновление базы данных?Запретить синхронизацию обновления базы данных в Django?

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

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

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

+0

, но syncdb предназначен для синхронизации ваших моделей и базы данных ... для меня неясно, чего вы пытаетесь достичь. – akonsu

ответ

1

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

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

+0

При автоматизации развертывания (используя 'ansible' или' puppet' или 'heroku') полезно выборочно запретить запуск syncdb в некоторых ваших базах данных, доступных только для чтения. Предупреждение: NOOP 'management.command.syncdb' в любом из ваших приложений запрещает' syncdb' запускать ** любые ** ваших приложений в этом проекте. И я не думаю, что вы можете отменить это поведение, связав его с core.management.command.syncdb для тех приложений, которые вы хотите синхронизировать. – hobs

0

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

manage.py schemamigration ap_with_read_only_database --empty initial_empty_migration_that_does_nothing 

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

Смежные вопросы