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



我在我将一些WordPress内容导入Mezzanine的blog_blogpost之后,在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时区功能变化。文档现在特别提及此错误(错误报告,链接到文档)。

您必须将时区表加载到MySQL(http://dev.mysql.com/doc/refman/5.6/en/mysql-tzinfo-to-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。填充" 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

对于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

因为在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

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

  • 停止服务
  • 下载MySQL提供的文件,但请注意,它们进入
    C:ProgramDataMySQLMySQL Server VERSIONdatamysql

    C:Program FilesMySQLMySQL Server VERSIONdata
    至少在2014年开始在Windows 7上。
  • 我还修改了C: Program Files MySQL MySQL Server版本 my.ini,以在此处添加default-time-zone = 'UTC'。然后重新启动服务。

对于其他任何人都在小牛上经过相同问题的任何人,我得到了安东提到的错误,我一直在得到;

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

django docs实际上在谈论这个问题:

我遇到了一个错误"数据库的时区定义和安装了PYTZ?"安装了pytz,所以我想问题是我的数据库吗?

如果您使用的是MySQL,请参见"加载时区定义的说明" MySQL注释的时区定义部分。

如果您遵循该链接,则会获得此建议:

如果您打算使用Django的时区支持,请使用mysql_tzinfo_to_sql将时区表加载到MySQL数据库中。这需要仅针对您的mySQL服务器,而不是每个数据库。

这是命令:

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql mysql

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

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

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

步骤#3:停止MySQL Server。

Xampp和Wamp使用其GUI或从任务管理器停止MySQL服务。

步骤#4:打开MySQL Server的数据目录的MySQL子目录。

对我来说是C:xamppmysqldatamysql

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

从您的未拉链文件夹中复制所有15个数据文件,然后将MySQL系统数据库的数据文件夹粘贴到数据文件夹中。覆盖所有这些.frm,.myd和.myi文件。

步骤#6:重新启动MySQL Server。

完成工作: - )

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

相关内容

  • 没有找到相关文章

最新更新