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 :

Données BLOB SQLite et Python


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Données BLOB SQLite et Python
    Bonjour,

    Je me suis inscris sur ce forum pour vous faire part de mon problème, en espérant y trouver des éléments de solutions. Toute aide sera appréciée!

    Je dispose d'une base de donnée SQLite. En autres, celle-ci contient des données BLOBS qui correspondent à des images 20*20 encodées en 8 bits, soit 400octets pour chaque canal. En effet, ma base de donnée contient un canal de l'image (YUV) sur chaque colonne. Pour simplifier le problème, je ne m'intéresse pour l'instant qu'au canal Y.

    Mon objectif est à terme de convertir ces données BLOBs en un fichier HDF5 (ou LMDB, mais je n'ai trouvé aucunes informations en ce qui concerne ce format).
    J'ai également besoin de reconstituer ces données en fichier image pour pouvoir les visualiser, tout ceci, en Python bien évidemment (je travaille avec Python 2.7.11).
    Charger les données de la base de données ne semble a priori pas poser de problème:
    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
     
    import sqlite3
    from pandas.io import sql
    #Selection de la base de donnee
    database='dataBase/Background.sqlite'
     
    #Selection du canal Y1
    instruction2="SELECT cutoutDataY1 FROM 'B_HYPOTHESIS'"
     
     
    try:
        conn = sqlite3.connect(database)
        #Creation d'un cursor
        cur = conn.cursor()
        cur.execute(instruction2)
    except:
          print('*** Requete SQL incorrecte ***')
    Mon premier problème se pose à la récupération de ces données BLOBs dans Python, qui les interprète en terme de Buffer, comme en témoigne le bout de code ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    In[3]: row = cur.fetchone()
    In[4]: print type(row)
    <type 'tuple'>
    In[5]: print type(row[0])
    <type 'buffer'>
    In[6 ]: print row[0]
    geklklklkntumcgpvzzxd`eiimomjfmmd\]bgton``bbbfghhbdfhc[[`pmncghfhifdhgaa``_Z\pprfotuupkefea\VUZXXnpqdq|~{qoidYTWVVXXXnooimw}ukmmhVR[[YVSWopqefpxmffhiXR^_WRPUmon^agmgdcehVPYYWUSXpqo\cdc`aabh[Ya_VVY\opoWahb]_cac]cccZZZ\finU[df_aeba\]did\[\agqUVchbcb__efehgjpoonqWXfma`d^conffb`ecntrjntsb_d^akid`]ZXYlts����rhi_`igcXSVTXluq||zxzvtd^dd]VTVVXiuvvtqm{~yjddaZWXXXYfv�ononpqpmkjf_Z]^]^m}nilooonoponmheghho{zb
    Je reconnais ne pas avoir compris la documentation Python concernant les Buffers, je suis d'ailleurs preneur de documentation à ce sujet. Idéalement, je souhaiterai en premier lieu obtenir un array de int8, qui me permettent de valider la concomitance de ce que je récupère avec ma base SQL.
    Quelques informations glanées sur le net suggèrent de passer par des string:
    A supposer que cela serve, comment récupérer mes entiers depuis ce str?

    Pour l'instant, je limiterai mes questions à cela. Mes investigations m'ont amené à considérer l'utilisation de la libraire pandas pour encoder mes données en hdf5, mais pour l'instant, je n'en suis pas encore là.

    Bonne après-midi et merci à ceux qui se pencheront sur mon problème.
    Clément.

  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,
    Citation Envoyé par ClemP Voir le message
    Mon objectif est à terme de convertir ces données BLOBs en un fichier HDF5 (ou LMDB, mais je n'ai trouvé aucunes informations en ce qui concerne ce format).
    Vous lancez la console Python et vous tapez help(buffer). Ils correspondent à ce que Python3 appelle MemoryView (et est mieux documenté dans cette version).

    Citation Envoyé par ClemP Voir le message
    A supposer que cela serve, comment récupérer mes entiers depuis ce str?
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> import struct
    >>> s = '12345'  # une chaine de caractère.
    >>> b = buffer(s) # dans un buffer
    >>> struct.unpack('b'*len(b), b)
    (49, 50, 51, 52, 53)
    >>>
    nota, une chaîne de caractères est déjà une suite d'entiers (int8): "en mémoire" les octets contiendront les mêmes nombres binaires, ce qui change c'est ce qui sera affiché et les opérations que vous allez pouvoir faire avec. Mais si votre but est de récupérer 400 octets stockés dans un BLOB SQlite pour les stocker ailleurs, il suffit de les recopier.

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Pour visualiser mon tableau d'entier, votre solution a parfaitement marché, je vous en remercie.
    En épluchant la documentation sur le module struct, j'ai pu clarifier ce que j'avais lu sur les buffer, c'est donc tout bénéf.

    A l'avenir, pour quiconque se retrouve dans une situation similaire:
    https://docs.python.org/2/library/struct.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print struct.unpack('B'*len(row[0]),row[0]) #'B' car mes entiers sont non signés, row[0] mon buffer
    Un grand merci à vous.

Discussions similaires

  1. [Conception] Affichage d'une donnée BLOB
    Par Methode dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/01/2007, 17h23
  2. Image socké dans une base de données : BLOB
    Par Le Mad dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/10/2006, 20h56
  3. Basse de données : blob bdt
    Par jdudoret dans le forum Bases de données
    Réponses: 27
    Dernier message: 30/06/2006, 23h59
  4. [VB6] Problème mysql avec type données BLOB
    Par KrusK dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/06/2006, 11h13
  5. Type de données BLOB
    Par madina dans le forum SQL
    Réponses: 4
    Dernier message: 14/06/2006, 09h28

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