我正在 Windows Azure 上部署我的 Django 项目。我使用 SQLite 作为数据库服务器,一切正常。当我部署我的项目时,我决定将它与 SQL Azure 数据库连接,但似乎这个解决方案产生了一些错误。我不再能够编辑用户个人资料。我总是得到这个错误:
AttributeError at /admin/auth/user/1/ 'unicode' object has no attribute 'tzinfo'
我正在 Windows Azure 上部署我的 Django 项目。我使用 SQLite 作为数据库服务器,一切正常。当我部署我的项目时,我决定将它与 SQL Azure 数据库连接,但似乎这个解决方案产生了一些错误。我不再能够编辑用户个人资料。我总是得到这个错误:
AttributeError at /admin/auth/user/1/ 'unicode' object has no attribute 'tzinfo'
当您的数据库包含如下日期时间戳时会发生此错误:
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
(但不是空白)。
看:
也可以看看:
我在尝试将django-pyodbc-azure
数据库后端与 Django (1.5.1) 一起使用时遇到了同样的问题:默认情况下,它将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
},
},
}
我在这里找到了我的解决方案。我不太了解 Azure 平台,所以我不知道这是否正是你的情况,如果不是,你仍然可以修改你的数据库,用datetime2(N)
旧的字段替换字段datetime
。
希望能帮助到你。