1

別の場所に2つの個別のdjangoサーバーとmysqlサーバーがあります

djangoモデルを使用して、オブジェクトを作成/更新しようとすると(以下のコードのように)。結果は、同じ django サーバーの現地時間値を持つ両方の 3 列です。それを行うときにdbサーバーの現地時間を取得する方法。

私のモデル:

class Test(models.Model):
    id = models.AutoField(primary_key = True, null = False)
    create = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)
    test = models.DateTimeField(null=True)

私のコード:

y = Test()
y.test = datetime.now()
y.save()

結果

    id  create               update               test                  
------  -------------------  -------------------  ------------------- 
     6  2013-10-07 06:57:04  2013-10-07 06:57:04  2013-10-07 06:57:04  
4

2 に答える 2

1

データベースのタイムゾーンを設定しないと、やりたいことができないと思います。それぞれの日付の意味を見てみましょう:

create = models.DateTimeField(auto_now_add=True)

日付を追加した時刻に自動的に設定します。

update = models.DateTimeField(auto_now=True)

プロセス (Web プロセスまたはコマンド) を開始すると、日付が自動的に設定されます。

test = models.DateTimeField(null=True)
...
y.test = datetime.now()

日付をプロセスの時間 (Django プロセスが実行される場所) に設定します。

データベースの時間を取得するには、データベースのタイムゾーンを設定に保存し、必要なときにいつでも使用できます。これには、自動生成されたフィールドは使用できません。

別の解決策として、データベースで手動で (生のクエリを使用して) 現地時間を取得することもできます。

于 2013-10-07T07:59:48.237 に答える
0

これを Django で処理する場合、Django はデータをデータベースに保存する前にこれらのフィールドを設定します。その場合、Django はアプリケーション サーバー (django が実行するサーバー) に従って時刻を設定します。

MySql インストールにいくつかの設定を行う必要があります (まだ設定していない場合)。次に、テーブルを再作成するか、データベースで変更する必要があります (Django モデル定義ではこれを処理できないと思います)。これは、これらの設定を説明するハウツー ドキュメントです。

CREATE TABLE SQLステートメントの例は次のようになります

CREATE TABLE test_test (
    create DATETIME DEFAULT CURRENT_TIMESTAMP,
    update DATETIME DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
)

yotr テーブルに既にデータがある場合は、テーブルを再作成する代わりに ALTER を実行できます。

次に、モデルを編集し、関連する日時フィールドを null に設定して、MySql で設定できるようにする必要があります。

class Test(models.Model):
    id = models.AutoField(primary_key = True, null = False)
    create = models.DateTimeField(null=True)
    update = models.DateTimeField(null=True)
    test = models.DateTimeField(null=True)
于 2013-10-07T08:29:09.987 に答える