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

Interfaçage autre langage Python Discussion :

python 3.8 et mysql 8.0 [Python 3.X]


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 24
    Points
    24
    Par défaut python 3.8 et mysql 8.0
    Bonjour à tous,
    Un petit souci

    J'ai une base de données avec une table qui stocke des images dans un blob
    A la sauvegarde tout ce passe bien car dans Mysqlworkbench je lit le blob affiche l'image
    sans Problème.

    Mais ou sa coince c'est lors de la lecture de cette image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    sel1 = "SELECT * FROM t_imageobject WHERE refbaseobject=%s"         
                    self.cur.execute(sel1, (ref,))
     
    #                sel1 = "select refimageobject, refbaseobject, pathimage,  code, filename, \
    #                        image from t_imageobject where refbaseobject = %s"
    Limage se travant dans le champ image
    et sur l'instruction
    self.cur.execute(sel1, (ref,))

    le message suivant apparait:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
     
    The above exception was the direct cause of the following exception:
     
    SystemError: <class 'UnicodeDecodeError'> returned a result with an error set
     
    The above exception was the direct cause of the following exception:
     
    Traceback (most recent call last):
      File "C:\Users\lionel\DevPython38\Graphics_1\Etiquettes.pyw", line 501, in OpenEtiquette
        self.ShowObject(rows)
      File "C:\Users\lionel\DevPython38\Graphics_1\Etiquettes.pyw", line 631, in ShowObject
        self.cur.execute(sel1, (ref,))
      File "C:\Python38\lib\site-packages\mysql\connector\cursor_cext.py", line 272, in execute
        self._handle_result(result)
      File "C:\Python38\lib\site-packages\mysql\connector\cursor_cext.py", line 163, in _handle_result
        self._handle_resultset()
      File "C:\Python38\lib\site-packages\mysql\connector\cursor_cext.py", line 651, in _handle_resultset
        self._rows = self._cnx.get_rows()[0]
      File "C:\Python38\lib\site-packages\mysql\connector\connection_cext.py", line 301, in get_rows
        else self._cmysql.fetch_row()
    SystemError: <method 'fetch_row' of '_mysql_connector.MySQL' objects> returned a result with an error set
    Alors la ???????
    Après un bon nombre de manips rien le message ci dessus
    ne me dit rien

    Si quequ'un à une idée elle est la bien venu
    et je le remercie d'avance

    Aplus

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Quel est le type de données de la colonne?

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 24
    Points
    24
    Par défaut python 3.8 mysql 8.0
    salut
    merci de répondre

    c'est un blob qui contient une image type png avec entête 89png
    elle doit être type binary

    Si je click droit sur le champ et execute Open value in editor
    safontionne affiche le code dans l'onglet binary et l'image dans l'onglet Image

    mais lorsque je lit la table avec l'instruction self.cur.execute(sel1, (ref,))
    j'ai l'erreur ci dessus
    je pense que dans le chargement de la valeur du champ il y a un problème de codage
    l'entête 89 50 4e 47 le 89 n'est pas compris
    pourquoi la est la question???????????


    J'ai cru que c'était à cause du png mais avec jpg c'est pareil

    le problème c'est que sa fonctionnait avant même sur python 2.7 et je n'ai rien modifier dans la base

    Aplus

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si c'est un type blob, çà devrait retourner du binaire et pas chercher à le convertir en "str".

    Si vous cherchez un peu sur Internet, il semble qu'ouvrir la connexion avec raw=True ou use_pure=True bypasse la conversion du type de la base de données en type Python. Mais ce n'est peut être pas la moins mauvaise solution: à vous de chercher.

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

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Bonsoir

    Je connaissait pas le raw=True
    mais c'est pas terrible sa déglingue toutes les requetes select
    tous les champ sa sort sa

    (bytearray(b'1'), bytearray(b'ETQgeom'), bytearray(b'2'), bytearray(b'2'))

    je ne suis pas allé plus loin si je doit me retaper toutes les requêtes pour mettre
    les champs en forme sa va pas le faire ( j'ai 30000 lignes de code)

    par contre j'ai repris l'ancienne version sous python 2.7.15
    avec le même code la même base et les mêmes images
    avec mysql 8.0 et connectorpython

    sa fonctionne impeccable aucun message d'erreur

    Je comprend pas ce que python 3.8 bricole par rapport a python 2.7.15
    pour en arriver à sa

    Merci pour la réponse

    Bonne soirée

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par pyoda Voir le message
    Je comprend pas ce que python 3.8 bricole par rapport a python 2.7.15
    pour en arriver à sa
    Sous Python2, les str sont des bytes par défaut. Avec Python3, les str sont de l'unicode. Ce qui est une des différence majeure entre les 2 versions.

    Normalement, les données d'une colonne de type BLOB devrait être binaire et le pilote qui convertir les types Python en type de la base de données devrait échanger des "bytes". Là il veut les convertir en Unicode en supposant qu'ils sont codés en UTF8.... et çà plante.

    A vous de remonter le bug aux développeurs ou de regarder si d'autres pilotes MySQL seraient plus cohérents.

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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Bonsoir

    Je suis sur une piste
    dés que c'est ok je t'envoie la solution
    demain ou apès

    Bonne soirée
    A plus

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Salut

    comme promis te donne les dernières news

    donc dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    sel1 = "SELECT * FROM t_imageobject WHERE refbaseobject=%s"         
                    self.cur.execute(sel1, (ref,))
    donnais les erreurs précédemment édités

    donc j'ai upgrade python 3.8 en 3.8.2 juste pour le fun

    par contre upgrade du connecteur python mysql de 8.0.18 en 8.0.19
    il a besoin de dépendance dnspython
    et protobuf mais pas utile ici n'as pas encore la version pour python3.8

    et la lecture du blob n'est plus décodé on se retrouve avec un bytearray et on a donc notre image que l'on peut arranger comme on veut

    dans mon cas io.BytesIO
    ensuite pil et bitmap + affichage

    Voila simple mais à deviner
    merci pour les tuyaux une idée neuve permet de résoudre le problèmes

    A plus et fait gaffe à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Connexion Python 3.7 avec MySQL workbench 6.3
    Par Supernatural dans le forum Général Python
    Réponses: 0
    Dernier message: 03/07/2018, 16h09
  2. Python 3.3 et MySQL
    Par lephotographe dans le forum Général Python
    Réponses: 1
    Dernier message: 18/07/2013, 16h39
  3. Python mysql
    Par azmimik dans le forum Bibliothèques tierces
    Réponses: 8
    Dernier message: 06/08/2006, 17h25
  4. création de base mySQL avec python
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 23/06/2006, 19h38
  5. MySQL-python pour Suse 10
    Par ms7 dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 26/05/2006, 10h42

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