web-dev-qa-db-fra.com

La base de données a renvoyé une valeur non valide dans QuerySet.dates ()

Je reçois cette erreur sur ma machine Ubuntu 12.04 avec mysql 5.5 après avoir importé du contenu Wordpress vers le blog_blogpost de Mezzanine.

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

J'ai ajouté à mon local_settings.py

import pytz
from pytz import *

et également défini le fuseau horaire dans my.cnf [mysqld]

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

mais j'obtiens toujours l'erreur unitl J'obtiens la ligne dans le modèle:

la balise est:

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

Appréciez votre aide pour le résoudre.

53
qliq

On dirait une erreur causée la fonctionnalité de fuseau horaire de Django 1.6 change . Les documents mentionnent désormais spécifiquement cette erreur ( rapport de bogue , lien vers les documents ).

Vous devez charger les tables de fuseau horaire dans mysql ( http://dev.mysql.com/doc/refman/5.6/en/mysql-tzinfo-to-sql.html ). Essayez d'exécuter sur votre serveur de base de données:

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

Ensuite, exécutez "flush tables" ou "flush query cache", sinon le problème peut ne pas disparaître même si vous avez chargé les données de fuseau horaire correctes:

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

mis à jour par @qris

109
Alexander Klimenko

Pour les utilisateurs de MacOS, j'ai trouvé une solution ici (en commentaire):

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

Parce que sur MacOS, nous avons une erreur qui ressemble à ceci:

$ 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
14
Anton Danilchenko

Ce qui a fonctionné pour moi:

1. Remplissez les définitions de fuseau horaire dans le tableau 'mysql'

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

2. Flush tables

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

. Redémarrez mysql

Sudo service mysql restart
12
Artur Barseghyan

Pour toute autre personne passant par ici avec le même problème sur Mavericks, j'obtenais l'erreur mentionnée par Anton selon laquelle je continuais à obtenir;

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

J'ai donc utilisé mysql_tzinfo_to_sql tz_file tz_name à partir du MySQL docs pour charger les fuseaux horaires spécifiques que je voulais;

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

Et maintenant Django ne renvoie pas d'erreurs donc je suis content: D

6
markwalker_

Pour Windows, procédez comme suit:

  • arrêter le service
  • téléchargez les fichiers fournis par MySQL mais notez qu'ils vont dans
    C:\ProgramData\MySQL\MySQL Server VERSION\data\mysql
    pas dans
    C:\Program Files\MySQL\MySQL Server VERSION\data
    au moins sur Windows 7 à partir de 2014.
  • J'ai également modifié C:\Program Files\MySQL\MySQL Server VERSION\my.ini pour ajouter default-time-zone = 'UTC' par les astuces ici . Redémarrez ensuite le service.
6
Tom

Les Django docs en fait parler de ce problème :

Je reçois une erreur "Les définitions de fuseau horaire pour votre base de données et pytz sont-elles installées?" Pytz est installé, donc je suppose que le problème est ma base de données?

Si vous utilisez MySQL, consultez la section Définitions de fuseau horaire des notes MySQL pour obtenir des instructions sur le chargement des définitions de fuseau horaire.

Si vous suivez ce lien, vous obtenez ce conseil:

Si vous prévoyez d'utiliser la prise en charge du fuseau horaire de Django, utilisez mysql_tzinfo_to_sql pour charger les tables de fuseaux horaires dans la base de données MySQL. Cela doit être fait une seule fois pour votre serveur MySQL, pas par base de données.

Voici la commande:

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql mysql
2
Flimm

Le chargement du fuseau horaire pour Mysql a résolu le problème pour moi. Si vous êtes sous Windows, suivez ces instructions:

Étape # 1: Téléchargez le package qui contient les fichiers de données des tables de fuseaux horaires prédéfinies. http: //dev.mysql. com/téléchargements/timezones.html

Étape # 2: Décompressez le fichier Zip téléchargé dans un dossier sur votre bureau.

Étape # 3: Arrêtez le serveur MySQL.

Pour Xampp et Wamp, utilisez leur interface graphique ou arrêtez le service mysql à partir du Gestionnaire des tâches.

Étape # 4: Ouvrez le sous-répertoire mysql du répertoire de données de votre serveur MySQL.

Pour moi c'est C:\xampp\mysql\data\mysql

Étape # 5: Remplacez les fichiers de données de fuseau horaire par la version téléchargée.

Copiez les 15 fichiers de données de votre dossier décompressé et collez-les dans le dossier de données de la base de données système mysql. Remplacez tous ces fichiers .frm, .MYD et .MYI.

Étape # 6: Redémarrez le serveur MySQL.

Et le travail est fait :-)

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

0
eliksir jouvence