新しいデータベースが初期化されたときやテストが実行される前に、カスタムスキーマ定義(関数、ビュー、タイプ、トリガなど)を適用したいときは何度もあります。 私はsyncdbの後にカスタムSQLを実行するようにDjangoに指示する最良の方法は何ですか?
from django.db.models.signals import post_syncdb
from django.db import connection
# Apply schema changes not defined by Django. Set a module-level
# flag to guard against multiple invocations of syncdb_handler()
def syncdb_handler(**kwargs):
if getattr(connection, 'syncdb_called', None):
return
connection.syncdb_called = True
cursor = connection.cursor()
cursor.execute(open('/path/to/schema.sql')).read())
post_syncdb.connect(syncdb_handler)
は、ドキュメントは、このようなソリューションを提案していないように動作しないsettings.py
に以下の追加を、呼び起こさ。カスタムSQLをデータベース作成の一部として適用するための規則はありますか?
この例では、接続ハンドラが複数回呼び出され、グローバル変数を保持することは良い設計パターンのようには見えません。
これを整理できましたか? – e4c5
いいえ、私たちはDjango 1.4を使用しており、後のバージョンに移行することは非常に難しいと判明した大規模なアプリケーションを持っています。 – eradman
おっと!私はあなたに1.4が今サポートされていないことを伝える必要はないと思います。 – e4c5