PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.python > Probleme d'accent et mysql
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Probleme d'accent et mysql

Réponse
 
LinkBack Outils de la discussion
Vieux 26/09/2007, 17h42   #1 (permalink)
ReM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Probleme d'accent et mysql

Bonjour,

J'utilise MySQLdb sur un serveur mutualisé chez OVH.
J'ai une erreur sur l'insertion ou la mise à jour d'un champ comportant
un accent.

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position
206: ordinal not in range(128)
args = ('ascii', "INSERT INTO proprietaire ( id, civilite, nom,
pr..., '', \n '', '', '', '', 0 )", 206, 207, 'ordinal not in range(128)')
encoding = 'ascii'
end = 207
object = "INSERT INTO proprietaire ( id, civilite, nom, pr...,
'', \n '', '', '', '', 0 )"
reason = 'ordinal not in range(128)'
start = 206

Pourtant via PhpMyAdmin, je n'ai pas de pb quand j'exécute la req dans
l'interface SQL et je suis pas très fort en encode.

Si quelqu'un avait une idée... Merci ;o)

PS mes scripts commencent par
# -*- coding: iso-8859-1 -*-
Et les champs de la db, qu'ils soient en latin1_swedish_ci ou en
latin1_bin, c'est pareil

ReM
  Réponse avec citation
Vieux 26/09/2007, 21h20   #2 (permalink)
jean-michel bain-cornu
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme d'accent et mysql

Bonsoir,
> J'utilise MySQLdb sur un serveur mutualisé chez OVH.
> J'ai une erreur sur l'insertion ou la mise à jour d'un champ comportant
> un accent.
>
> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position
> 206: ordinal not in range(128)
> args = ('ascii', "INSERT INTO proprietaire ( id, civilite, nom,
> pr..., '', \n '', '', '', '', 0 )", 206, 207, 'ordinal not in range(128)')
> encoding = 'ascii'
> end = 207
> object = "INSERT INTO proprietaire ( id, civilite, nom, pr..., '',
> \n '', '', '', '', 0 )"
> reason = 'ordinal not in range(128)'
> start = 206


L'erreur me semble bizarre, tu n'as pas de n° de ligne ni le nom du
script qui plante ?
Par ailleurs, si par hasard tu as la ligne
query = query.encode(charset)
dans ...MySQLdb/cursors.py aux alentours de la ligne 146, essaye de la
mettre en commentaire, c'est une bêtise. Il faut avoir les droits
d'écriture au répertoire Lib/site-packages de python.
Et je sais, j'aurais dû le signaler au développeur, mais je n'ai pas eu
le temps.
  Réponse avec citation
Vieux 26/09/2007, 21h38   #3 (permalink)
jean-michel bain-cornu
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme d'accent et mysql

> Par ailleurs, si par hasard tu as la ligne
> query = query.encode(charset)
> dans ...MySQLdb/cursors.py aux alentours de la ligne 146, essaye de la
> mettre en commentaire, c'est une bêtise. Il faut avoir les droits
> d'écriture au répertoire Lib/site-packages de python.
> Et je sais, j'aurais dû le signaler au développeur, mais je n'ai pas eu
> le temps.


Dans la version 1.2.2, il y a
if isinstance(query, unicode):
query = query.encode(charset)
ce qui semble indiquer que l'erreur a été corrigée, ou au moins qu'une
tentative a été faite.
Il faudrait confirmer que ton erreur vient de cette partie là, et savoir
quelle version de MySQLdb tu utilises.

A+
jm
  Réponse avec citation
Vieux 27/09/2007, 16h43   #4 (permalink)
ReM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme d'accent et mysql

jean-michel bain-cornu a écrit :
>> Par ailleurs, si par hasard tu as la ligne
>> query = query.encode(charset)
>> dans ...MySQLdb/cursors.py aux alentours de la ligne 146, essaye de la
>> mettre en commentaire, c'est une bêtise. Il faut avoir les droits
>> d'écriture au répertoire Lib/site-packages de python.
>> Et je sais, j'aurais dû le signaler au développeur, mais je n'ai pas
>> eu le temps.

>
> Dans la version 1.2.2, il y a
> if isinstance(query, unicode):
> query = query.encode(charset)
> ce qui semble indiquer que l'erreur a été corrigée, ou au moins qu'une
> tentative a été faite.
> Il faudrait confirmer que ton erreur vient de cette partie là, et savoir
> quelle version de MySQLdb tu utilises.
>
> A+
> jm


J'utilise la version 1.2.1_p2 de chez OVH, je suis en mutualisé !

Plus de détails sur l'erreur :
/usr/lib/python2.4/site-packages/MySQLdb/cursors.py in
execute(self=<MySQLdb.cursors.Cursor object>, query="UPDATE proprietaire
\n SET civil...'ma', notaire_id = 1\n WHERE id = 1", args=None)
144 db = self._get_db()
145 charset = db.character_set_name()
146 query = query.encode(charset)
147 if args is not None:
148 query = query % db.literal(args)
query = "UPDATE proprietaire \n SET civil...'ma', notaire_id = 1\n WHERE
id = 1", query.encode = <built-in method encode of str object>, charset
= 'latin1'


J'essaie d'inserer le mot Rémi dans un champ de type VARCHAR

Merci ;o)

ReM
  Réponse avec citation
Vieux 27/09/2007, 20h37   #5 (permalink)
jean-michel bain-cornu
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme d'accent et mysql

> J'utilise la version 1.2.1_p2 de chez OVH, je suis en mutualisé !
>
> Plus de détails sur l'erreur :
> /usr/lib/python2.4/site-packages/MySQLdb/cursors.py in
> execute(self=<MySQLdb.cursors.Cursor object>, query="UPDATE proprietaire
> \n SET civil...'ma', notaire_id = 1\n WHERE id = 1", args=None)
> 144 db = self._get_db()
> 145 charset = db.character_set_name()
> 146 query = query.encode(charset)
> 147 if args is not None:
> 148 query = query % db.literal(args)
> query = "UPDATE proprietaire \n SET civil...'ma', notaire_id = 1\n WHERE
> id = 1", query.encode = <built-in method encode of str object>, charset
> = 'latin1'


Ce ressemble bien au bug que j'avais identifié (ligne 146).
Tu peux essayer de passer un unicode à la place d'un string :
ex : sqlTxt = unicode('insert..."Rémi"...etc..','iso-8859-1')
instruction_sql(sqlTxt)
Le iso-8859-1 colle bien si tu es sous windows. Si tu es sous linux, ce
serait plutôt utf-8, tout dépend du charset dans lequel le programme a
été saisi.
Tu peux aussi installer la dernière version de MySQLdb dans ton espace
perso ; tout dépend de la quantité de modifs que tu devras faire dans
ton code pour passer des unicodes au lieu des strings. Si tu en as
beaucoup, ça vaut le coup d'essayer d'installer cette dernière version.

Quand tu auras passé un unicode, la ligne 146 retransformera cet unicode
en string dans un charset qui sera supposé plaire à MySQL, et ça devrait
fonctionner. L'idée de tout ça est de gérer automatiquement la
translation du charset du programme vers le charset de la base. L'idéal
serait de commenter la ligne 146 qui ne sert à rien si tu n'as qu'un
jeux de caractères à gérer.

Tout ça n'a visiblement pas trop bien été testé au départ par notre bon
Andy Dustman, qui a probablement autre chose à faire que de se
préoccuper des caractères accentués et autres étrangetés étrangères...

Bon courage,
jm
  Réponse avec citation
Vieux 27/09/2007, 23h58   #6 (permalink)
ReM
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme d'accent et mysql

jean-michel bain-cornu a écrit :
>> J'utilise la version 1.2.1_p2 de chez OVH, je suis en mutualisé !
>>
>> Plus de détails sur l'erreur :
>> /usr/lib/python2.4/site-packages/MySQLdb/cursors.py in
>> execute(self=<MySQLdb.cursors.Cursor object>, query="UPDATE
>> proprietaire \n SET civil...'ma', notaire_id = 1\n WHERE id = 1",
>> args=None)
>> 144 db = self._get_db()
>> 145 charset = db.character_set_name()
>> 146 query = query.encode(charset)
>> 147 if args is not None:
>> 148 query = query % db.literal(args)
>> query = "UPDATE proprietaire \n SET civil...'ma', notaire_id = 1\n
>> WHERE id = 1", query.encode = <built-in method encode of str object>,
>> charset = 'latin1'

>
> Ce ressemble bien au bug que j'avais identifié (ligne 146).
> Tu peux essayer de passer un unicode à la place d'un string :
> ex : sqlTxt = unicode('insert..."Rémi"...etc..','iso-8859-1')
> instruction_sql(sqlTxt)
> Le iso-8859-1 colle bien si tu es sous windows. Si tu es sous linux, ce
> serait plutôt utf-8, tout dépend du charset dans lequel le programme a
> été saisi. (...)



ça marche avec ça !!!!
Super et moindre modif pour moi
Merci beaucoup !!!

  Réponse avec citation
Vieux 29/09/2007, 08h49   #7 (permalink)
jean-michel bain-cornu
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Probleme d'accent et mysql

> Merci beaucoup !!!
>


Vraiment pas de quoi, pour une fois que c'est moi qui donne un truc dans
ce forum...
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 03h23.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,12227 seconds with 15 queries