0

[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 ディレクトリを持っていないので、必要ないかもしれません。sqlcustomsyncdb

さまざまな理由から、JSON 形式を使用したくないのですが、必要に応じて使用します....しかし、.sql 形式に多くの時間を費やしてきたので、実際に何が起こっているのかを知りたいと思っています (そして、十分に見てきました)。これが他の人を助けるかもしれない既存の関連する質問)。

4

2 に答える 2

0

実際の研究ではなく行動に基づいていますが、私はそれを見つけたと思います。どこでも「tile」を「tilexx」に変更しただけで機能しました。この django-project の投稿は、ある種の python クラス名の競合がある場合、カスタム SQL が実行されないことを示しています...そして「タイル」はかなり一般的なものです。

答えは、クラスの名前をもう少しユニークなものに変更することです。

于 2012-11-28T23:48:48.660 に答える