[myapp]/sql/[model-name].sql で、CREATE TABLE コマンドの後にカスタム フックとして使用したい既存の SQL ステートメントがいくつかあります。
私のアプリは INSTALLED_APPS にあります。を実行するとリストに表示されます./manage.py sql
。
カスタム フックが見つかりました。次のいずれかを実行すると、SQL ステートメントの出力が表示されます。
./manage.py sqlall <myapp>
./manage.py sqlcustom <myapp>
./manage.py sql <myapp>
Macでpostgres 9.xを使用しています。
同じデータベースにpsql
(ユーザーなしで) .sql ファイルからそれらをコピーして psql コマンド入力に貼り付けると、それらはすべて機能します...したがって、postgres によって理解される有効な SQL であると思います。これらはすべて非常に単純な INSERT ステートメントです (フィクスチャについては以下で説明します)。
ただし、./manage.py syncdb
これらのステートメントを実行すると、実行されないか、無視されるか、サイレント エラーが発生します。私が知っているのは、新しい行がデータベースに表示されないということだけです。postgres ログ ファイルを追跡していますが、syncdb を実行しても何もログに記録されないため、.sql ファイルが見つからないのか、それとも解析してデータベースに到達する前に何らかのエラーが見つかったのかわかりません。
これらのステートメントと同等のフィクスチャ用の .json ファイルを作成しましたが、./manage.py loaddata <path-to-json-file>
正しく動作します。私のサイトでは、これらの値がデータベースに表示されるようになりました。これにより、設定ファイルが正しく、postgres 内に書き込んでいるデータベースが正しく設定されており、実行時に書き込み権限があると信じることができます./manage.py
。
他の投稿で、django のドキュメントが間違っているので、カスタム フックを「models」ディレクトリに配置する必要があることを確認しましたが、それが正しいかどうかはわかりません。私のフックを見つけたらsqlall
、見つけてはいけませんか? また、(まだ) models ディレクトリを持っていないので、必要ないかもしれません。sqlcustom
syncdb
さまざまな理由から、JSON 形式を使用したくないのですが、必要に応じて使用します....しかし、.sql 形式に多くの時間を費やしてきたので、実際に何が起こっているのかを知りたいと思っています (そして、十分に見てきました)。これが他の人を助けるかもしれない既存の関連する質問)。