|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
> 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 |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
> 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 |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
> 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 |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
> 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 |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
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 !!! |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
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 !!! |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
> Merci beaucoup !!!
> Vraiment pas de quoi, pour une fois que c'est moi qui donne un truc dans ce forum... |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
> Merci beaucoup !!!
> Vraiment pas de quoi, pour une fois que c'est moi qui donne un truc dans ce forum... |
|
![]() |
| Outils de la discussion | |
|
|