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 :

[Debutant] Python-SQLite lire colonne BLOB


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Par défaut [Debutant] Python-SQLite lire colonne BLOB
    Bonjour,

    Je me casse la tete depuis plusieurs heures sur un probleme qui je suppose doit etre tres simple ... . Donc desolé de poser une question triviale, mais je ne sais plus trop quoi faire ...

    Utilisant python, j essaye d extraire des données d une table SQLite, ou une de mes colonnes est de type BLOB.

    Si j utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import sqlite3
    connection = sqlite3.connect('O:/080 - Models/Models/IRAS/Network/Zone II/Standardised networks/network.db')
    cursor=connection.cursor()
    cursor.execute("select * from nodeattributes where node_id=676")
    for row in cursor:
        print row[0], row[1], row[2]
    et que ma colonne BLOB est row[2], bah ca ne fait que me retourner le correct row[0] et row[1], mais row[2] est egal a "None". Pourtant si j utilise la meme requete dans SQLLite2009 Pro ca me retourne un BLOB.

    Donc ma question est comment pouvoir lire une colonne BLOB depuis python et afficher les valeurs contenus dans le BLOB ?

    Je dois preciser que je n ai pas crée la Base de donnees SQLite et que donc je ne sais meme pas comment les donnees ont ete entrés dans le BLOB ... Donc en fait, je ne sais meme pas si ce que je veux faire soit possible ...

    Merci

    Slumpy.

  2. #2
    Expert confirmé
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Salut,

    Insertion d'un données BLOB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    blob = open("image.jpg", 'rb').read()
    sql = "INSERT INTO photos (photo) VALUES(?)"
     cursor.execute(sql, [sqlite3.Binary(blob)])
    Lecture d'une donnée BLOB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    req = "SELECT IDphoto, photo FROM photos WHERE [...]"
    [...]
    IDphoto, bufferPhoto = listeDonnees[0]
    # Transformation du buffer en wx.bitmap
    io = cStringIO.StringIO(bufferPhoto)
    img = wx.ImageFromStream(io, wx.BITMAP_TYPE_JPEG)
    Et voilou...

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Par défaut
    Salut,

    Merci de m aider, c cool

    Malheureusement, pour l instant je n ai tjs pas reussi a pouvoir lire cette fichu colonne ...

    J aurais ptet du preciser, mais je sais que les donnees incluses dans le blob ne sont pas une image mais des valeurs.

    Slumpy

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Tu as tout de même essayé avec : io = cStringIO.StringIO(buffer) ?
    (Même si ce n'est pas une photo)

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Par défaut
    Salut Ggamer,

    Ouaip j ai essayé. Mais je dois avouer que je ne suis pas sur de comprendre cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IDphoto, bufferPhoto = listeDonnees[0]
    Je suppose que listeDonnees est une ligne de resultat ? et que la colonne 0 est la ou est contenu une clé unique ?

    Donc j ai essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import sqlite3
    import cStringIO
     
    connection = sqlite3.connect('O:/080 - Models/Models/IRAS/Network/Zone II/Standardised networks/network.db')
    cursor=connection.cursor()
    cursor.execute("select node_id, attribute_id, value from nodeattributes where node_id=676")
    for row in cursor:
        attribute_id, buffer = row[1]
        io=cStringIO.StringIO(buffer)
        print io
    Dans mon cas, node_id sera tjs le meme attribute_id est unique et value contient le blob. C'est a dire :

    node_id - - - attribute_id - - - Value
    676 - - - - - - - 60 - - - - - - -BLOB
    676 - - - - - - - 61 - - - - - - -BLOB
    676 - - - - - - - 62 - - - - - - -BLOB
    676 - - - - - - - 63 - - - - - - -BLOB

    J obtiens l erreur suivante :

    Traceback (most recent call last):
    File "D:\work\NetBeansProjects\test\src\8 - read blob.py", line 13, in <module>
    attribute_id, buffer = row[1]
    TypeError: 'int' object is not iterable

    Merci pour ton aide et mes excuses d etre aussi pourri ...

    Slumpy

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

Discussions similaires

  1. SQLite lire colonne complète
    Par ncurses dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 16/07/2013, 11h19
  2. inserer un pdf dans une colonne BLOB
    Par yac dans le forum Oracle
    Réponses: 2
    Dernier message: 10/03/2006, 15h49
  3. changer le tablespace d'une colonne blob
    Par learn dans le forum Oracle
    Réponses: 4
    Dernier message: 15/08/2005, 18h44
  4. debuter en SQLite
    Par venomelektro dans le forum SQLite
    Réponses: 4
    Dernier message: 08/12/2004, 19h17
  5. INTERBASE 5.5 insertion dans une colonne BLOB
    Par mariustrezor dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/10/2004, 18h06

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