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

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    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 éminent
    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
    Points : 7 291
    Points
    7 291

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    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 régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    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 actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    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 régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    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

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

    La construction a,b,c = machin suppose que machin soit un uplet (liste, set) comprenant 3 items et les assigne aux variables a, b, c.

    Dans votre cas, row correspond à une "ligne" retournée par le select.
    Vous vous attendez à ce que ce soit un uplet à 3 éléments - 0, 1, 2.
    row[1] n'étant pas un uplet mais simplement un "int" çà râle.

    Pour l'instant, tant que row[2] est None, transformer ce "None" en file-like via stringIO ne devrait pas aider.
    Pourriez vous poster le schéma de la table?
    - W

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Points : 240
    Points
    240
    Par défaut
    Pour compléter Wiztricks, essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for node_id, attribute_id, value in cursor:
        io=cStringIO.StringIO(value)
        print io
    Mais en effet, j'avais pas vu dans ton premier post que tu disais que ton BLOB était = None. Du coup, t'es pas prêt de récupérer grand-chose ! Tu es sûr qu'il y des informations dans ce champ-là ?

  9. #9
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut,

    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.
    Est il possible que la requete effectuée dans SQLite2009 Pro me retourne BLOB alors qu il est null ? Etant donnée que certaines lignes dans ma base de données contiennent NULL dans ma colonne BLOB et non pas BLOB, je me suis dis que si il y avait marqué BLOB celui-ci etait forcement non nul. Je viens d essayé la meme requete que je citais dans mon premier message sur une autre base de données du meme type et je n obtiens po None. Donc je suppose que oui c est possible ...

    Je viens d effectuer le test suivant :

    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
    import sqlite3
    import cStringIO
     
    connection = sqlite3.connect('O:/080 - Models/Models/IRAS/Network/Zone II/Standardised networks/Copy of Network.db')
    cursor=connection.cursor()
    cursor.execute("select node_id, attribute_id, value from nodeattributes where node_id=676")
    for node_id, attribute_id, value in cursor:
        if value <> None:
            print '--- Values ---'
            print node_id, attribute_id, value
            print '--- cStringIO ---'
            io=cStringIO.StringIO(value)
            print node_id, attribute_id,io
            print
            print
            print
    Je n ai pas d erreur a l execusion si j ecarte les valeurs value=None (sinon il est pas content pour le cStringIO.StringIO !). Et voila la reponse :



    Donc les requetes me retournent bien quelque chose pour l attribut value (que ce soit avec ou sans cStringIO.StringIO), mais je ne sais pas comment lire les parametres inclus dans les blobs

    La meme requete effectuée dans SQLite2009 Pro me retourne:


    Je ne sais pas si cela change quelque chose, mais je sais que les informations contenus dans les blobs ne sont pas identiques pour les different attribute_id. Certains sont je pense une simple valeur (c le cas de 48, certains sont un tableau de valeurs.)

    Le shema de la table est :


    En tout cas, merci de prendre de votre temps pour m aider

    Slumpy.

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

    Pour l'instant, le schéma autorise value == None et SQLite2009 Pro montre que pour node_id == 676 existent plusieurs lignes dont certaines ont "value == None".
    Tout cela me semble a peut près cohérent, non?
    - W

  11. #11
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je viens d'essayer les blobs avec sqlite3, et tout marche parfaitement:

    - ajout après conversion de la chaine en 'buffer' (un des types de Python)

    - lecture avec un code similaire au tien.

    Comme ce n'est pas toi qui a construit la base, regarde si elle n'a pas été construite avec sqlite2 qui ne supportait pas aussi bien les blobs:

    http://effbot.org/zone/sqlite-blob.htm

    http://code.activestate.com/recipes/...ata-in-sqlite/

    Tyrtamos

  12. #12
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut,

    Merci d avoir pris le temps de faire un petit test tyrtamos !

    Effectivement, je ne sais pas si elle a ete construite avec sqlite 3. Mais ne sais pas comment pouvoir verifier ca ...

    Je ne sais pas si on a le droit de poster des liens vers des fichiers, mais si oui, voila un liens vers une base de donnees.
    (Pour des raisons de confidentialités j ai du virer toutes les autres tables sauf celle dont nous parlons: nodeattributes.)

    lines ici : http://ifile.it/29wfl4x/Sample_blob.db

    Petit detail qui peut ptet aider:
    Je n arrive pas a le lire, mais je sais que les blobs pour attribute_id=48 contiennent l information sur un champ qui est egal a 1000.

    Je sais aussi que les blobs pour attribute_id=52 contiennent chacun les informations:


    Merci pour votre aide.

    Slumpy

  13. #13
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    J'ai téléchargé ta base, et voilà ce que j'ai fait:

    1- j'ai essayé de la lire avec le logiciel que j'utilise qui est "SqliteExpert pro": j'y arrive. Il y a dans le champ value pas mal de null, mais pas partout. Quand il n'y a pas de null, je peux accéder à du contenu à l'aide d'un éditeur hexa.

    2- j'ai essayé une transformation de ta base en script sql avec la méthode sqlite3.iterdump (voir sur mon site: http://python.jpvweb.com/mesrecettes...rde_script_sql), et ça marche: je récupère un script qui a cette tête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    INSERT INTO "nodeattributes" VALUES(1,14,NULL);
    INSERT INTO "nodeattributes" VALUES(1,15,NULL);
    INSERT INTO "nodeattributes" VALUES(1,16,NULL);
    INSERT INTO "nodeattributes" VALUES(1,17,NULL);
    INSERT INTO "nodeattributes" VALUES(1,18,X'8002636E756D70792E636F72652E6D756C7  ...  ');
    INSERT INTO "nodeattributes" VALUES(1,19,NULL);
    INSERT INTO "nodeattributes" VALUES(1,20,NULL);
    INSERT INTO "nodeattributes" VALUES(2,38,X'8002636E756D70792E636F72652E6D756C7  ...  ');
    INSERT INTO "nodeattributes" VALUES(2,39,NULL);
    INSERT INTO "nodeattributes" VALUES(2,40,NULL);
    ...
    Les valeurs non null sont représentées en hexa (en sqlite, l'hexa est précédé de 'X'), sont très longues (43963 octets), et sont toutes identiques (???).

    3- j'ai fait un petit code de lecture d'une 'value' dont je sais qu'elle n'est pas null: node_id=1 and attribute_id=18:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cnx = sqlite3.connect(u"Sample_blob.db")
    cur = cnx.cursor()
    cur.execute("""SELECT value FROM nodeattributes WHERE node_id=1 and attribute_id=18;""")
    blob = str(cur.fetchone()[0])
    cur.close()
    cnx.close()
    Et blob est un str qui a 43963 octets

    Donc, pour moi, les données sont récupérables, mais comme je ne sais pas ce que c'est, je ne peux pas dire si elles sont correctes.

    Tyrtamos

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 292
    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 292
    Points : 36 788
    Points
    36 788
    Par défaut
    Salut,
    Effectivement, je ne sais pas si elle a ete construite avec sqlite 3. Mais ne sais pas comment pouvoir verifier ca ...
    Les fichiers d'un BDD contiennent une en-tête qui décrit ce qu'il contient et en général la version de la BDD - ce qui évite de faire n'importe quoi.

    Pour SQLite3, cet header est décrit ici et les 16 premiers octets sont "SQLite format 3\000".

    De toutes façon, le format de la version 2 est incompatible avec celui de la V3: impossible de se tromper!

    2- j'ai essayé une transformation de ta base en script sql avec la méthode sqlite3.iterdump (voir sur mon site: http://python.jpvweb.com/mesrecettes...rde_script_sql), et ça marche: je récupère un script qui a cette tête:
    SQLite vient avec un programme qui permet de passer des commandes en mode ligne: pas besoin de programmer, on peut presque tout faire à la console ou via des scripts bash - c'est quand même bien lorsqu'on se pose des questions sur ses scripts Python.
    Faire sqlite3 puis .help pour voir ce que ca sait faire.

    Dans le cas particulier, dump de la base: sqlite3 <nom_base> .dump
    chargement: cat fichier_dump | sqlite3 <nom_base>

    - W

  15. #15
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par wiztricks Voir le message
    Pour SQLite3, cet header est décrit ici et les 16 premiers octets sont "SQLite format 3\000".
    Merci pour l'info! J'ai regardé avec un éditeur hexa: la base est bien en format 3.

    Tyrtamos

  16. #16
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut,

    le boulet est de retour de weekend...

    - j'ai fait un petit code de lecture d'une 'value' dont je sais qu'elle n'est pas null: node_id=1 and attribute_id=18:
    Merci d avoir pris le temps de telecharger la base de donnees et faire les tests, c vraiment sympa . J ai testé ton code, et il donne le meme resultat que celui que j avais donné dans un de mes posts precedent. Donc c cool.

    Mais mon probleme est que je ne sais pas comment lire les valeurs contenu dans c strings. C'est a dire, par exmple, pour node_id = 676 et attribute_id=48 le string que j obtiens est € G@�@�����. comment est ce que je peux faire pour savoir que ce string contient la valeur 1000 ? (Je sais que c le cas car j ai un programme qui lis les valeurs contenus dans cette db. Mais je n ai pas son code) Et aussi comment faire si je veux changer ce 1000 en 9000 par exemple ?

    Meme question pour node_id = 676 et attribute_id=52, ou je sais que les valeurs contenus dans le blob sont :
    Je sais aussi que les blobs pour attribute_id=52 contiennent chacun les informations:
    Comment faire pour savoir par exemple que Maximum release est egal a 50, et comment changer cette valeur pour 500 par exemple ?

    Merci

    Slumpy

    PS: J adore ta signature Tyrtamos

  17. #17
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si je lis la 'value' correspondant à node_id = 676 et attribute_id=48, je trouve une chaine de 179 caractères, et je trouve au début les mots:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cnumpy.core.multiarray
    _reconstruct
    cnumpy
    ndarray
    cnumpy
    dtype
    ...
    Il y a quelques caractères illisibles qui peuvent s'interposer entre ces mots, et tous les caractères qui suivent, jusqu'à concurrence des 179 caractères, sont illisibles.

    J'en déduit que la 'value' en question est un buffer de données stockées dans un format binaire propre à un module scientifique (je suppose numpy, et ndarray=tableau multidimensionnel).

    Malheureusement, je ne connais pas du tout: il faudrait que quelqu'un qui connaisse ce genre de module prenne le relais: comment faire reconnaitre le buffer donné par le blob, comme un objet ndarray afin d'accéder à ses données en clair...

    Citation Envoyé par Slumpy Voir le message
    PS: J adore ta signature Tyrtamos
    Merci . C'est mon goût pour la science fiction qui en est à l'origine...

    Tyrtamos

  18. #18
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut tyrtamos,

    Si je lis la 'value' correspondant à node_id = 676 et attribute_id=48, je trouve une chaine de 179 caractères, et je trouve au début les mots:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cnumpy.core.multiarray
    _reconstruct
    cnumpy
    ndarray
    cnumpy
    dtype
    ...
    T'es sur que tu n as pas testé avec attribute_id=52 pour obtenir ca ? Le resultat pour attribute_id=48 est bcp plus simple je pense.

    Malheureusement, je ne connais pas du tout: il faudrait que quelqu'un qui connaisse ce genre de module prenne le relais: comment faire reconnaitre le buffer donné par le blob, comme un objet ndarray afin d'accéder à ses données en clair...
    Tu penses que c faisable ? Ou sans savoir comment ca a ete enregistré c mort ?

    Merci pour ton aide.

    Slumpy

  19. #19
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Salut,

    Petit up car ca m aiderais pas mal de plus etre bloqué sur ca

    Slumpy

  20. #20
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    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 474
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Désolé, je croyais que tu avais trouvé.

    Effectivement, les 179 octets trouvés avec les mots reconnus correspondent à la 'value' de node_id=676 and attribute_id=52. L'attribute_id=48 donne 12 octets et aucun mot reconnaissable.

    Voilà un petit code qui charge et enregistre dans un fichier séparé les octets concernés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import sqlite3
     
    cnx = sqlite3.connect(u"Sample_blob.db")
    cur = cnx.cursor()
    cur.execute("""SELECT value FROM nodeattributes WHERE node_id=676 and attribute_id=52;""")
    blob = cur.fetchone()[0]
    print type(blob), len(blob)
    cur.close()
    cnx.close()
     
    f = open(u"buffer.bin", 'wb')
    f.write(blob)
    f.close()
    Après, on peut lire le contenu avec, par exemple, un éditeur hexa comme EditHexa sous Windows.

    En tout cas, je ne sais pas en faire plus: mon hypothèse est qu'il s'agit d'un objet de l'un des modules scientifiques de Python, éventuellement sauvegardé sous forme binaire avec l'un des modules du genre pickle???. Si tu ne peux pas obtenir cette info, il ne te reste plus qu'à essayer. Mais compte tenu du nombre des possibilités, attends-toi à y passer beaucoup de temps...

    Mais peut-être quelqu'un d'autre connait-il ce genre de sujet?

    Tyrtamos

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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