問題タブ [django-database]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - django-modelsデータベース照合の問題:Unicodeをサポートするフィールドを宣言しますか?
この問題が発生しました。にユニコード文字列を割り当てることができない場合models.CharField
。
私はこの解決策を見つけましたが、それは私にはうまくいかないようです。データベースは次のエラーを返します。
さらに、これらのソリューションはすべて、テーブルが作成された後、またはpython manage.pysqlAPP_NAME出力を変更して手動でテーブルを作成した後にのみ機能するように見えます。
Pythonコードでdjangoモデルを最初に宣言したときからこれを修正する方法はありますか?したがって、manage.py syncdbは適切なテーブルを生成するだけですか?
python - Django:djangoの起動時にメソッドを1回だけ呼び出す
Djangoの起動時に(データベースから)いくつかの変数を初期化したい。
データベースからデータを取得することはできますが、問題は、initializeメソッドをどのように呼び出す必要があるかです。そして、これは一度だけ呼び出されるべきです。
他のページを調べてみましたが、答えが見つかりませんでした。
現在、コードは次のようになっています::
def get_latest_dbx(request、....):
#データベースからデータを取得する
def get_latest_x(request):
get_latest_dbx(request、x、...)
def startup(request):
get_latest_x(request)
python - Django ロガーから実際の SQL を取得するには?
Django (1.3) Web アプリケーションの SQL パフォーマンスを分析しようとしています。にアタッチしdjango.db.backends
て設定するカスタム ログ ハンドラーを追加しましたDEBUG = True
。これにより、実行中のすべてのデータベース クエリを確認できます。
ただし、SQL は有効な SQL ではありません。実際のクエリにはselect * from app_model where name = %s
いくつかのパラメーターが渡されていますが (例: "admin"
)、ログ メッセージはパラメーターを引用していないため、SQL はselect * from app_model where name = admin
であり、これは間違っています。これは、 を使用しても発生しdjango.db.connection.queries
ます。私の知る限り、django デバッグ ツールバーには、これを処理するための複雑なカスタム カーソルがあります。
更新Django デバッグ ツールバーを提案する場合: 私はそのツールを認識しています。しかし、それは私が必要とすることをしません。アプリケーションのサンプル インタラクションを実行し、使用されている SQL を集計したいと考えています。DjDT は、表示と浅い学習に最適です。しかし、数十ページの相互作用を集約および要約するにはあまり適していません。
実行されている本物の正当な SQL を取得する簡単な方法はありますか?
python - git merge がデータベース ファイルと競合する (複数の開発者)
友人と私は Django アプリを開発しており、git を使用しています。
私たちが仕事をしている間、私たちはサイトに偽のアカウントを作成し、ログインし、コンテンツをデータベースにアップロードします..テスト目的で. ブランチをマージするたびに、データベース ファイルでマージの競合が発生します。データベース ファイルはリポジトリにあり、個別にテストしているため、ファイルのローカル コピーは異なる方法で開発されます。
データベース ファイルが追跡されないようにするにはどうすればよいですか?
以下により、ローカル パスの使用を避けることができました。
理想的なのは、次のようなものです。
データベース ファイルがコミットされないようにするにはどうすればよいでしょうか。
django - インデックスの追加(db_index = True)
私はDjangoのコーディングスタイルについての本を読んでいて、彼らが話していることの1つはですdb_index=True
。Djangoを使い始めて以来、この関数が何をするのかよくわからないため、この関数を使用したことはありません。
だから私の質問は、いつインデックスを追加することを検討するのかということです。
django - Django&Soft Deletion:実装アーキテクチャ
定義
- SOFT DELETE-データベースからオブジェクトを削除しませんが、削除するように見えます
- HARDDELETE-オブジェクトをデータベースから完全に削除します
質問
コードベース(具体的には、Djangoプロジェクト)にソフト削除を実装するための最良の方法は何ですか?
私が思う最も簡単な方法は、単純に次を追加することです。
を実装するスーパークラスに移動しsoftDeleteObject
、オーバーライドdelete()
して問題のオブジェクトに適切なフラグを設定します。関連するオブジェクトも同じスーパークラスから継承する必要があります。
別の方法は、代わりに元のオブジェクトを削除し、削除されたオブジェクトの表現であるアーカイブオブジェクトに相当するものを用意することです。
分析
最初のものはより単純に見えますが、いくつかの広範囲のオーバーライドが必要です-たとえば、User
削除されたすべてのオブジェクトの外部キー関係が保持されていることを確認するためにオーバーライドする必要があり、ユーザーを削除すると、ソフト削除されたすべてのオブジェクトをハード削除します。
2つ目は、代理オブジェクトの作成をトリガーするpre_deleteシグナルを使用して実装できます。これにもいくつかの利点がありますが(すべてのdelete()
メソッドをオーバーライドする必要はありません)、プロジェクトで使用されるモデルのアーカイブバージョンを実装する必要があります。
どちらが望ましいですか、そして他の選択肢はありますか?
django - Django が ModelFormSet のすべてのフォームに対して ForeignKey オプションをクエリしないようにする
ModelFormSet
Django アプリケーション用の csv インポート フォームを作成しており、インポートする行を検証目的で表示したいと考えています。
したがってModelAdmin
、csv から行を読み取り、ModelFormSet(queryset=an_empty_queryset, initial={data_from_the_csv})
.
ForeignKey
問題は、モデルがフィールドを介して他の 3 つのモデルを参照し、フォームセットの各フォームの各フィールドModelChoiceField
に対して、のオプションを入力するためにデータベース クエリが発行されることです。
Django がフォームをキャッシュしないのはなぜですか (何度か使用されているため)、またはこれを実現する方法が既にあるのでしょうか?
django - Django Unique 一括挿入
データベース内の一意性を確保しながら、大量のレコードをすばやく一括挿入できる必要があります。挿入される新しいレコードは既に解析されており、一意です。コード自体ではなく、データベース レベルで一意性を強制する方法があることを願っています。
データベースのバックエンドとして MySQL を使用しています。django が他のデータベースでこの機能をサポートしている場合、これは要件であるため、バックエンドを柔軟に変更できます。
Django での一括挿入はこのメソッドを使用しないため、save
一意のフィールドと一意の一緒のフィールドを尊重しながら、一度に数百から数千のレコードを挿入するにはどうすればよいですか?
単純化した私のモデル構造は、次のようになります。
編集:
データベースにまだ存在しないレコードを挿入する必要があり、既に存在するレコードは無視する必要があります。
python - 複数のフィールドを同じ DB 列に
でアプリを高速化しようとしていprefetch_related
ます。リレーションをたどることがGenericForeignKey
でき、さらに深くすることもできます__
が、関連するモデルにそのようなフィールドがない場合、残念ながら失敗します。
モデル構造の例を次に示します
したがってModelC
、インスタンスは または のいずれかを指すことができModelA
ますModelB
。そして、このようなクエリセットを使用して、A モデルと B モデルの両方をプリフェッチできます。ModelC.objects.all().prefetch_related('content_object')
残念ながら、イベント オブジェクト (SomeModelA
またはSomeModelB
)も選択する必要があります。
走ろうとしたら
ModelC
を指すインスタンスしかない場合は機能しますが、フィールドがなく代わりにあるModelA
ために失敗する場合があります。ModelB
event_object
event
このモデルはコード全体の多くの場所で使用されるため、フィールドの名前を変更することはお勧めできません。フィールド/列のエイリアスを作成する方法があるのだろうか。
私はこのようにしようとしていました:
DBテーブルの同じ列を指す2つのフィールドを作成します。ただし、これはsave
メソッドを壊すため機能しません。Django は、UPDATE
1 つの列が 2 回配置される SQL クエリを作成し、DatabaseError を取得します。
そのようなエイリアスを作成する方法はありますか? またはprefetch_related
、例外をスローしないようにする別の解決策があるでしょうか?
更新:save
メソッドには、update_fields
このフィールドを除外するために使用できるパラメーターがあります。ただし、1.5 で導入され、1.4 を使用しています。だから私は答えを探し続けます。
更新 #2 : @shx2 からトレースバックの提供を依頼されました。2 つの可能なトレースバックがあります。1st - 最初のオブジェクトに属性がない場合:
そして、prefetch_related パラメーターが最初のオブジェクトに対して有効である場合、2 番目のトレースバックを取得します。
django - Django ログをデータベースに保存する方法は?
アプリケーション ログ (エラー ログではなく情報) をデータベースに保存して、さらにそれを使用して Web に表示できるようにしたいと考えています。良いアプローチを教えてください。