問題タブ [django-mysql]
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.
python - 注釈フィールドは、datetime.datetime ではなく str です
例
関連モデルのデータを使用してオブジェクトに注釈を付けようとしていますDateTimeField
。
sqlite3
デフォルトのローカルデータベースとMySQL
(を使用)を交互に使用しますmysqlclient
。SQLite は機能し、MySQL はクラッシュします。
理由は次のとおりです。両方のデータベースのコンパイラ
次のように、int と string のタプルのリストのリストを返します。
SQLite
MySQL
ここで、SQLite バックエンドが想定される datetime フィールドを検出すると、実行時に次のメソッドを使用してコンバーターを生成します。
django.db.backends.sqlite3.operations.DatabaseOperations
これは正常に動作します。
ただし、MySQL バックエンドはこれを行います。
django.db.backends.mysql.operations.DatabaseOperations
その後、Django は<str>
タイムゾーンの認識をチェックしようとしてクラッシュします。
環境
上記は、クラッシュを再現するために使用したおもちゃの例です。
実際の本番環境では、MySQL コンパイラは、奇妙なことに、注釈付きの作成者の完全なリストを要求するexecute_sql
とオブジェクトを含む「生の」データのタプルのリストのリストを返し( )、特定の作成者を要求すると文字列を含む同じリストを返します。 1 つ ( )。クエリセットのそれぞれの sql クエリは、単一の WHERE 句の存在によってのみ異なります。datetime.datetime
action=='list'
action=='retrieve'
これにより、私は何か間違ったことをdatetime.datetime
していて、ドライバーから取得するはずの生のデータを取得していないと思います (Django のバグの可能性がはるかに低いというよりも)。
私は何をすべきか?N+1 は問題外です。これがアプリのメインのオペレーター ビューになり、datetime フィールドは実際には2つの一対多の関係の深さになります。