在带有和不带有时区的Django中处理多个数据库

我处于使用django(2.0.7)处理多重数据库的情况:

  1. database_A:没有时区;
  2. database_B:时区为“欧洲/巴黎”;

settings.py

USE_TZ = True
TIME_ZONE = 'Europe/Paris'

DATABASES = {
  'database_A': {
     'NAME': ...
     'PASSWORD': ... etc.
     'TIME_ZONE': None,# still raise RuntimeWarning; received a naive datetime while time zone support is active.
},'database_B': {
    'NAME': ...,etc.
}

关于数据库A的模型

class Something(models.Model):
   date_creation = models.DateTimeField()

   def save(self,*args,**kwargs):
       if self._state.adding is True:
          self.date_creation = timezone.datetime.now()  # naive 

       print("BEFORE SAVE")
       print(self.date_creation)

       super(Something,self).save(*args,**kwargs)

       print("AFTER SAVE")
       print(self.date_creation)

       print("AFTER REFRESH")
       self.refresh_from_db()
       print(self.date_creation)

我得到以下结果

 BEFORE SAVE
 2019-11-04 11:44:35.233876
 AFTER SAVE
 2019-11-04 11:44:35.233929
 AFTER REFRESH
 2019-11-04 10:44:35.23392             # 10:44:35,what's wrong ô_O ?

我在欧洲/巴黎和世界标准时间之间相差1小时。

import pytz
from datetime import datetime
datetime.now(tz=pytz.timezone('Europe/Paris')),timezone.now()

(datetime.datetime(2019,11,4,12,10,55,320028,tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>),datetime.datetime(2019,320077,tzinfo=<UTC>))

因此,我认为PostgreSQL正在使用UTC来保存被视为时区感知日期时间的天真日期时间?

在数据库中,我有以下时间

\d something_table
date_creation           | timestamp without time zone | non NULL Par defaut,now()

 SELECT NOW();
              now
-------------------------------
 2019-11-04 11:45:48.907105+01             # consider delay,changing terminal to launch query;
(1 ligne)
关于多个数据库和时区的

Django documentation说:

  

为此设置TIME_ZONE选项到适当的时区   DATABASES设置中的数据库。

     

这对于连接到不支持时间的数据库很有用   区域,并且当USE_TZ为True时不受Django管理。

即使time_zone为None,Django还是PostgreSQL是否将本地时间保存到UTC中? 知道如何解决吗? (我无法更改数据库架构T_T)

colby63 回答:在带有和不带有时区的Django中处理多个数据库

回答我自己的问题。

要处理不带时区的日期时间,必须将datetimefield替换为charfield。

本文链接:https://www.f2er.com/3167096.html

大家都在问