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

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

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%}

感谢您的帮助,以解决它。

看起来像是错误导致了Django的1.6时区function的变化 。 文档现在特别提到这个错误( 错误报告 , 链接到文档 )。

你必须加载时区表到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 

然后运行“flush tables”或“flush query cache”,否则,即使您已经加载了正确的时区数据,问题也可能不会消失:

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

由@qris更新

对于MacOS用户,我在这里find了解决scheme(在评论中):

 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 

什么对我有效:

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 

对于任何一个在小牛身上经历过同样问题的人,我都得到了安东提到的错误,

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

所以我使用MySQL文档中的 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

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

  • 停止服务
  • 下载由MySQL提供的文件,但注意他们进去
    C:\ProgramData\MySQL\MySQL Server VERSION\data\mysql
    不在
    C:\Program Files\MySQL\MySQL Server VERSION\data
    至less在2014年的Windows 7上。
  • 我还修改了C:\ Program Files \ MySQL \ MySQL Server VERSION \ my.ini, 在这里给每个提示添加default-time-zone = 'UTC' 。 然后重新启动服务。

Django文档实际上是在讨论这个问题 :

我得到一个错误“您的数据库和pytz安装的时区定义?”安装pytz,所以我猜这个问题是我的数据库?

如果您正在使用MySQL,请参阅MySQL注释的“ 时区定义”部分,以获取有关加载时区定义的说明。

如果你按照这个链接,你会得到这个build议:

如果您打算使用Django的时区支持,请使用mysql_tzinfo_to_sql将时区表加载到MySQL数据库中。 这只需要为MySQL服务器完成一次,而不是每个数据库。

这是命令:

 mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql mysql 

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

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

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

步骤#3:停止MySQL服务器。

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

第四步:打开MySQL服务器数据目录的mysql子目录。

对我来说是C:\xampp\mysql\data\mysql

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

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

第六步:重新启动MySQL服务器。

而这项工作已经完成:-)

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

Interesting Posts