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

qli*_*liq 54 mysql django timezone mezzanine

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

我添加到我的local_settings.py

import pytz
from pytz import *
Run Code Online (Sandbox Code Playgroud)

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

default-time-zone = "+01:00"
Run Code Online (Sandbox Code Playgroud)

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

标签是:

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

感谢您的帮助以解决它.

Ale*_*nko 110

看起来错误导致Django的1.6时区功能发生变化.文档现在特别提到了这个错误(错误报告,文档链接).

您必须将时区表加载到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 
Run Code Online (Sandbox Code Playgroud)

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

mysql -u root -p -e "flush tables;" mysql 
Run Code Online (Sandbox Code Playgroud)

由@qris更新

  • 注意现在遇到这个问题的人:这个解决方案仍然可以与Django 1.8完美搭配. (5认同)
  • 在 Django 1.11 上运行良好。 (2认同)

Ant*_*nko 14

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

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

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


Art*_*yan 12

什么对我有用:

1.在"mysql"表中填充时区定义

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)

2.冲洗桌子

mysql -u root -p -e "flush tables;" mysql 
Run Code Online (Sandbox Code Playgroud)

3.重启mysql

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)


mar*_*er_ 6

对于其他任何在小牛队遇到相同问题的人来说,我得到了安东提到的错误,我不断得到;

ERROR 1406 (22001) at line 38981: Data too long for column 'Abbreviation' at row 1
Run Code Online (Sandbox Code Playgroud)

所以我用mysql_tzinfo_to_sql tz_file tz_nameMySQL的文档加载,我想具体的时间段;

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

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


Tom*_*Tom 6

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

  • 停止服务
  • 下载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以default-time-zone = 'UTC'根据这里的提示添加.然后重启服务.

  • 这是我能在 Stack Overflow 上找到的唯一答案,它有在 Windows 上配置时区表的正确说明。甚至 MySQL 文档似乎也没有包含此信息。太糟糕了,我只能为这个答案投票一次 +1 (2认同)