IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Encode et BDD


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 45
    Par défaut Encode et BDD
    Bonjour tout le monde,

    Actuellement j'écris un script pour remplir une table dans ma BDD...

    Mais...car il y a toujours un mais, j'ai un p'tit soucis avec l'encodage (oh sacré python)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     File "scriptxmlwindows.py", line 295, in <module>
        curs.execute(sql)
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 87: ordinal not in range(128)
    J'ai cette erreur ci donc j'ai essayé un encode("utf8")
    ce qui me donne le code ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sql="INSERT INTO UCMDB_WINDOWS (ID_SERVEUR, PROJET) VALUES ('"+ID_SERVEUR+"',q'$"+PROJET+"$')"
     
    	print sql
    	curs.execute(sql.encode("utf8"))
    	print type(sql)
    Du coup ça marche, mais le problème c'est que dans ma base de données je retrouve des mots comme ça "PMP N-Tier r¿¿f¿¿rence"

    En espérant que vous pourrez m'aider...
    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 591
    Par défaut
    Salut,

    Les "instructions" SQL sont ASCII (et donc utf-8), la responsabilité de la sérialisation des objets Python doit être laissée au driver de la BDD.

    C'est la raison pour laquelle, il n'est pas recommande d’écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO UCMDB_WINDOWS (ID_SERVEUR, PROJET) VALUES ('"+ID_SERVEUR+"',q'$"+PROJET+"$')"
    Mais préférer "sous-traiter":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .execute("INSERT INTO UCMDB_WINDOWS (ID_SERVEUR, PROJET) VALUES (?, ?)", (ID_SERVEUR, PROJET))
    C'est un principe et non la solution a votre problème.

    La solution passe par la lecture de la documentation du driver pour savoir lui indiquer de faire proprement le boulot qu'on veut lui sous-traiter.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Avec Python, on fait ce qu'on veut, mais la base de donnée en question demande peut-être un certain encodage: à voir dans son manuel ou dans le manuel de son pilote Python.

    Par exemple sous Python 2, avec sqlite3, on peut configurer le pilote avec "connexion.text_factory = str" pour que la communication se fasse en utf-8. A défaut, elle se fait en unicode interne.

    Si c'est possible, il vaut mieux travailler en unicode en interne avec Python 2 (avec Python 3, c'est l'encodage "normal").

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 591
    Par défaut
    @tyrtamos
    Le PO a déjà perdu pas mal de temps a trouver une réponse chez les zéros. On y apprend qu'il utilise cx_oracle. Pas de bol, c'est pas le driver ni le SGDB le plus fastoche pour commencer.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pas de bol, c'est pas le driver ni le SGDB le plus fastoche pour commencer.
    J'ai jeté un coup d'oeil: effectivement...

    Cependant avec google et "python cx_oracle encodage", on trouve -entre autres- des astuces comme ici: http://www.debian-fr.org/cx-oracle-e...ge-t42971.html.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 591
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Cependant avec google et "python cx_oracle encodage", on trouve -entre autres- des astuces comme ici: http://www.debian-fr.org/cx-oracle-e...ge-t42971.html.
    On trouve de tout sur Google.
    En fait ça dépend de la version de cx_oracle, éventuellement de celle de Python,... puis il faut pouvoir tester un peu pour s'assurer qu'on a pige ce charabia.... Un vrai chemin de croix.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Password qui ne sont pas encodé dans la BDD
    Par Romaiiiiiin dans le forum Django
    Réponses: 2
    Dernier message: 18/04/2015, 17h22
  2. Erreur quand j'encode un Tedit dans une bdd sql
    Par bullrot dans le forum C++Builder
    Réponses: 16
    Dernier message: 29/11/2007, 02h46
  3. param bdd locale et encoding
    Par nma dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 14/11/2005, 17h07
  4. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 19h18
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo