数据库在QuerySet.dates()中返回一个无效值

时间:2014-01-25 13:36:32

标签: mysql django timezone mezzanine

我将一些Wordpress内容导入到Mezzanine的blog_blogpost后,在我的Ubuntu 12.04机器上使用mysql 5.5出现此错误。

ValueError at /admin/blog/blogpost/
Database returned an invalid value in QuerySet.dates(). Are time zone definitions and pytz installed?

Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/blog/blogpost/
Django Version: 1.6.1
Exception Type: ValueError
Exception Value:    
Database returned an invalid value in QuerySet.dates(). Are time zone definitions and pytz installed?
Exception Location: /home/me/.mezenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py in results_iter, line 1107
Python Executable:  /home/me/.mezenv/bin/python
Python Version: 2.7.3
Python Path:    
[u'/home/me',
 '/home/me/sai',
 '/home/me/.mezenv/local/lib/python2.7/site-packages/distribute-0.6.24-py2.7.egg',
 '/home/me/.mezenv/local/lib/python2.7/site-packages/pip-1.1-py2.7.egg',
 '/home/me/.mezenv/lib/python2.7',
 '/home/me/.mezenv/lib/python2.7/plat-linux2',
 '/home/me/.mezenv/lib/python2.7/lib-tk',
 '/home/me/.mezenv/lib/python2.7/lib-old',
 '/home/me/.mezenv/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/home/me/.mezenv/local/lib/python2.7/site-packages']
Server time:    Sat, 25 Jan 2014 13:44:11 +0100


Error during template rendering

In template /home/me/.mezenv/local/lib/python2.7/site-packages/grappelli_safe/templates/admin/change_list.html, error at line 140

我已添加到我的local_settings.py

import pytz
from pytz import *

并在my.cnf中定义了时区[mysqld]

default-time-zone = "+01:00"

但我仍然得到错误unitl我得到模板中的行:

标签是:

  

140 {%block date_hierarchy%} {%date_hierarchy cl%} {%endblock%}

感谢您的帮助以解决它。

6 个答案:

答案 0 :(得分:108)

看起来错误导致Django's 1.6 timezone functionality changes。文档现在专门提到了此错误(bug reportlink to docs)。

您必须将时区表加载到mysql(http://dev.mysql.com/doc/refman/5.6/en/mysql-tzinfo-to-sql.html)中。 尝试在数据库服务器上执行:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -u root -p 

然后运行“刷新表”或“刷新查询缓存”,否则即使您加载了正确的时区数据,问题也可能不会消失:

mysql -u root -p -e "flush tables;" mysql 

由@qris更新

答案 1 :(得分:14)

对于MacOS用户,我找到了解决方案here(在评论中):

mysql_tzinfo_to_sql /usr/share/zoneinfo | sed -e "s/Local time zone must be set--see zic manual page/local/" | mysql -u root mysql

因为在MacOS上我们有错误,如下所示:

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u roomysql

Warning: Unable to load '/usr/share/zoneinfo/+VERSION' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh87' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh88' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh89' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Mideast/Riyadh87' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Mideast/Riyadh88' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Mideast/Riyadh89' as time zone. Skipping it.
ERROR 1406 (22001) at line 38981: Data too long for column 'Abbreviation' at row 1

答案 2 :(得分:12)

对我有用的是什么:

<强> 1。填充'mysql'表中的时区定义

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

<强> 2。同花表

mysql -u root -p -e "flush tables;" mysql 

第3。重启mysql

sudo service mysql restart

答案 3 :(得分:6)

对于其他在小牛队中遇到相同问题的人,我得到了Anton提到的错误,我不断得到;

ERROR 1406 (22001) at line 38981: Data too long for column 'Abbreviation' at row 1

所以我使用MySQL docs中的mysql_tzinfo_to_sql tz_file tz_name来加载我想要的特定时区;

mysql_tzinfo_to_sql /usr/share/zoneinfo/GMT GMT | mysql -u root -p mysql
mysql_tzinfo_to_sql /usr/share/zoneinfo/UTC UTC | mysql -u root -p mysql

现在Django没有回复错误,所以我很高兴:D

答案 4 :(得分:6)

对于Windows,请执行以下步骤:

  • 停止服务
  • 下载files provided by MySQL,但请注明他们在C:\ProgramData\MySQL\MySQL Server VERSION\data\mysql中进入C:\Program Files\MySQL\MySQL Server VERSION\data 而非至少在Windows 7上截至2014年。
  • 我还修改了C:\ Program Files \ MySQL \ MySQL Server VERSION \ my.ini,每the tips here添加default-time-zone = 'UTC'。然后重启服务。

答案 5 :(得分:0)

为Mysql加载时区解决了我的问题。 如果您在Windows上,请按照以下说明操作:

步骤1:下载包含预建时区表数据文件的包。  http://dev.mysql.com/downloads/timezones.html

步骤2:将下载的ZIP文件解压缩到桌面上的文件夹中。

步骤3:停止MySQL服务器。

对于Xampp和Wamp,使用他们的GUI或从任务管理器停止mysql服务。

步骤#4:打开MySQL服务器数据目录的mysql子目录。

对我而言,C:\xampp\mysql\data\mysql

步骤5:使用下载的版本覆盖时区数据文件。

从解压缩的文件夹中复制所有15个数据文件并粘贴到mysql系统数据库的数据文件夹中。覆盖所有这些.frm,.MYD和.MYI文件。

步骤#6:重启MySQL服务器。

工作完成了: - )

来源:http://www.geeksengine.com/article/populate-time-zone-data-for-mysql.html