【问题标题】:Django IPython sqlite complains about naive datetimeDjango IPython sqlite 抱怨天真的日期时间
【发布时间】:2012-07-27 08:56:35
【问题描述】:

我在 Django 1.4 中有一个新项目,使用 sqlite db。使用 django_extenstions 的 shell_plus 也没有问题。

当我安装 IPython 时,shellshell_plus 都开始抱怨:

/path/to/my/virtualenv/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:50:
RuntimeWarning: SQLite received a naive datetime (2012-07-29 13:15:45.229464) while time zone support is active.

IPython 本身似乎使用了未知的日期时间。如何解决这个问题?

编辑:

我不想禁用 Django 的时区支持。

【问题讨论】:

  • @PeterStahl 是的,这不是一个真正的问题,只要我不从 shell 创建日期时间并将它们保存到 Django 模型,并且可能在一年中的“不确定”时间也这样做接近夏令时的变化,等等...... :) 即便如此,Django 可能会放弃警告。但是还是……嗯,不好看! :))
  • @PeterStahl 可能会把它写成答案......
  • 请参阅code.djangoproject.com/ticket/19738 了解 Django 对如何处理此问题的思考。到目前为止,还没有提出可口的解决方案。

标签: django ipython pytz


【解决方案1】:

我把它放在我的 local_settings.py 中:

#ignore the following error when using ipython:
#/django/db/backends/sqlite3/base.py:50: RuntimeWarning:
#SQLite received a naive datetime (2012-11-02 11:20:15.156506) while time zone support is active.

import warnings
import exceptions
warnings.filterwarnings("ignore", category=exceptions.RuntimeWarning, module='django.db.backends.sqlite3.base', lineno=53)

【讨论】:

  • 太好了,效果很好!只是为了更准确地了解该代码的放置位置:将其放在 Django 项目的 settings.py 文件中就足够了。您无需为此创建另一个名为 local_settings.py 的文件。
  • 我不得不稍微修改一下 warnings.filterwarnings("ignore", category=exceptions.RuntimeWarning, module='django.db.backends.sqlite3.base', lineno=53)跨度>
  • 请务必注意,这样做会使您面临可能的数据损坏。如果您编写的代码通过原始 SQL 查询将原始日期时间保存到您的 SQLite 数据库,那么有了这个“修复”,Django 将不再能够警告您。
  • “前方有一座冰山!”...“让那个人和他的后代保持沉默!”
  • 。 . . lineno=57 用于 Django 1.8
【解决方案2】:

我有同样的问题,但我不认为这真的是一个问题。 IPython 似乎在内部使用天真的日期时间,而 Django 只是警告它。当您打开时区支持以及检测到天真的日期时间时,Django 总是会发送此警告。在我的机器上,此警告仅在我启动或关闭 IPython 时出现。此警告不会以任何方式影响您使用 IPython 的工作。因此,您可以在 IPython 中安全地创建感知日期时间,并将它们保存到您的数据库中。为了消除该警告,您可能必须处理 IPython 的内部结构。

一般来说,当使用有意识的日期时间时,我强烈建议为此使用 pytz

【讨论】:

  • 老实说,我认为最好的选择是这个;又名“忍受它。”
【解决方案3】:

修改 settings.py,将 USE_TZ 设置为 False 即可解决此问题。

【讨论】:

  • 是的,但我希望使用时区支持:)
  • -1。这并不能解决问题,只是通过停用 Django 有用且重要的时区设置来规避它。从 1.4 版开始,不建议使用天真的日期时间。如果可以,请始终使用有意识的日期时间。这将防止您以后出现很多问题。此外,此警告消息不会以任何方式影响 IPython 的行为,因此停用时区支持是没有意义的。
猜你喜欢
  • 2011-11-14
  • 2013-03-11
  • 2014-12-03
  • 2015-01-02
  • 2014-03-28
  • 2019-08-06
  • 1970-01-01
  • 2014-02-02
  • 2021-01-27
相关资源
最近更新 更多