如何修复Django错误:“'unicode'对象在数据库读取时没有属性'tzinfo'”

时间:2013-05-10 23:06:44

标签: django admin azure-sql-database django-timezone

我正在Windows Azure上部署我的Django项目。我使用SQLite作为数据库服务器,一切都很好。当我部署了My project时,我决定将它与SQL Azure数据库连接,但似乎这个解决方案产生了一些错误。我无法再编辑用户个人资料。我总是得到这个错误:

AttributeError at /admin/auth/user/1/
'unicode' object has no attribute 'tzinfo' 

2 个答案:

答案 0 :(得分:2)

我在尝试使用Django(1.5.1)的django-pyodbc-azure数据库后端时遇到了同样的问题:默认情况下,它将DateTimeField字段存储在您的数据库中datetime2(7),它看起来仍然是在Django中不受支持。 在我的情况下,我在'use_legacy_datetime' : True中添加了settings.py选项,如下所示:

DATABASES = {
    'default': {
        'ENGINE' : 'sql_server.pyodbc',
        'NAME' : '<MYDBNAME>',
        'USER': '<MYDBUSER>',
        'PASSWORD': '<MYDBPWD>',
        'HOST': '<MYHOST>',
        'OPTIONS': {
            'use_mars': True,
            'use_legacy_datetime' : True, # I added this line
        },
    },
}

我找到了解决方案here。 我不太了解Azure平台,因此我不知道这是否正是您的情况,如果不是,您仍然可以修改数据库,将datetime2(N)字段替换为旧的datetime字段。

希望它有所帮助。

答案 1 :(得分:2)

当您的数据库包含如下所示的日期时间戳时,会发生此错误:

0000-00-00 00:00:00.000000

(如果你使用MySQLWorkbench删除或覆盖以前的日期,这可能发生在MySQL中)

当您尝试在Django模型对象中检索这些记录时,您将从pytz时区库中获得异常:

AttributeError 'unicode' object has no attribute 'tzinfo'

您应首先在数据库中编辑这些日期,并将其设置为更近的日期,例如2018-01-01 00:00:00.000000或设置为NULL(但不是空白)。

请参阅:

另见: