python - 加载数据未正确处理时间戳和时区

标签 python django yaml

我正在使用启用了 mysql 和时区的 django 1.4.1。我将数据转储到 yaml,修改了一些字段以创建一些测试数据,然后尝试将其加载回去。但是,即使指定了 tz,Django 仍然提示天真的日期时间

具体来说,我的加载数据有:

fields: {created_date: !!timestamp '2012-09-15 22:17:44+00:00', ...

但是 loaddata 给出了错误:

RuntimeWarning: DateTimeField received a naive datetime (2012-09-15 22:17:44) while time zone support is active.

这对我来说没有多大意义,因为它:

  1. UTC 时间戳
  2. Django 使用 dumpdata 导出的完全相同的格式

有什么方法可以告诉 django 这是一个 UTC 日期吗?

最佳答案

问题源于 PyYAML。当 loaddata 将日期时间交给 PyYAML 时,它会获取感知日期时间,将时间调整为 UTC,然后返回一个原始日期时间,这会生成警告。

有一个Django ticket , 以及 PyYAML ticket关于这个问题。两者都更详细地介绍了上述意外行为。从工单中的评论来看,这个问题似乎不太可能很快得到解决。

如果您在项目的 settings.py 中设置了 TIME_ZONE = 'UTC',您将在正确的时间加载,但您仍然会收到警告。如果您的时区设置为其他任何时区,Django 会将日期时间视为本地日期时间,并将其调整为 UTC,这可能是不需要的。

避免这种情况的最佳方法是使用 JSON 作为序列化格式。

希望对您有所帮助。

关于python - 加载数据未正确处理时间戳和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462634/

相关文章:

amazon-web-services - 通过 SQS sam yaml 订阅 SNS

amazon-web-services - elasticsearch cloudformation yaml 文件不起作用

python - 获取文件夹名称

python - category() 得到了一个意外的关键字参数 'category_name_slug'

python - 在 python 中通过 django-crispy-forms 渲染表单

django - 如何使用 django-pytest 跟踪 Django 重定向?

python - bool 注释导致重复?

python - 在 Python 的循环中添加项目

python - 在个人计算机上加载 PipelineModel 时出现 ValueError

python - Pyyaml 转储不会为相同对象生成 anchor