Django IPython sqlite抱怨天真的日期时间

frn*_*nhr 16 django ipython pytz

我在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.
Run Code Online (Sandbox Code Playgroud)

似乎IPython本身使用不知不觉的日期时间.怎么解决这个问题?

编辑:

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

pow*_*wlo 15

我把它放在我的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)
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,它完美无缺!只是为了更准确地说明放置这段代码的位置:将它放在Django项目的`settings.py`文件中就足够了.您不需要为此创建另一个名为`local_settings.py`的文件. (3认同)
  • 重要的是要意识到,通过这样做,您可能会暴露自己可能的数据损坏.如果您编写的代码通过原始SQL查询将天真的日期时间保存到您的SQLite数据库,那么这个"修复"就位,Django将无法再向您发出警告. (2认同)

pem*_*ahl 12

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

一般使用感知日期时间时,我强烈建议使用pytz来实现此目的.