django - 在有和没有时区的 Django 中处理多个数据库
问题描述
我处于使用 django (2.0.7) 处理多个数据库的情况:
- database_A:无时区;
- database_B:时区为“欧洲/巴黎”;
设置.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 ?
我在欧洲/巴黎和 UTC 之间有相同的 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, 11, 4, 11, 10, 55, 320077, tzinfo=<UTC>))
所以,我认为 PostgreSQL 正在使用 UTC 来保存我认为是时区感知 datetime 的天真的日期时间?
在数据库中,我有以下时间
\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)
在 DATABASES 设置中将 TIME_ZONE 选项设置为该数据库的适当时区。
当 USE_TZ 为 True 时,这对于连接到不支持时区且不受 Django 管理的数据库很有用。
即使 time_zone 为 None ,Django 或 PostgreSQL 是否会将本地时间保存为 UTC?知道如何解决吗?(我无法更改数据库架构 T_T)
解决方案
回答我自己的问题。
要处理没有时区的日期时间,必须将日期时间字段替换为字符字段。
推荐阅读
- linux - 在linux上打开root拥有的端口?
- python - 如何从 Python 中的 SQL 数据库中编号?
- python - 生成“垃圾箱中的球”结果的算法对垃圾箱大小有限制?
- python - 在 for 循环中迭代时如何更改 tkinter 中每个输入框的名称?
- javascript - 不和谐 | 我如何使用 ID 来制作化身命令,不仅提到
- flutter - 为什么showcaseview在第一次尝试时会抛出错误?
- docker - Kafka Schema Registry 无法注册 Schema - 由于 master 未知,注册模式请求失败
- python - QTextTable 在单元格中插入一行
- java - 使用 Keytool 的 Java HTTPS 服务器
- python - 错误消息说我的目录有语法错误