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 :

Stocker un dictionnaire dans une base de donnée sql lite


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut Stocker un dictionnaire dans une base de donnée sql lite
    Bonsoir cher amis,

    Etant novice dans le domaine des SGBD, j'aurais besoin de vos eclaircissements. Après avoir coder un programme qui me permet de récolter des infos spécifiques et de les mettres en forment dans un dictionnaire (voir ci-dessous) j'aimerais savoir s'il est possible de stocker ce dictionnaire tel quel dans une base de donnée (sql lite) ou si je dois faire autrement? Merci pour vos commentaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dico = {'projet': u'projet1', 'campagne': [{'iteration': [{'num': u'153', 'nom': u'beta1', 'emploi': [{'nom': 'emploi1', 'propriété': [{'étape': u'etape1', 'motif': u'renvoi'}]}

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Difficile de t'aiguiller dans la mesure où tu ne dis pas comment tu souhaites exploiter tes données par la suite (c'est la question que tu dois tout d'abord te poser). Sinon bien sur tu peux stocker n'importe quoi n'importe comment dans n'importe quelle base de données.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu peux bien sur enregistrer ce genre de données dans une base de données
    mais il faudrait que celle-ci soient claires pour toi.

    En clarifiant comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dico = {'projet': u'projet1', 
            'campagne': [{'iteration': [{'num': u'153', 
                                         'nom': u'beta1', 
                                         'emploi': [{'nom': 'emploi1', 
                                                     'propriété': [{'étape': u'etape1', 
                                                                    'motif': u'renvoi'}]}
    Il manque des crochets et parenthèses fermant, est-ce incomplet ou volontaire (donc beugué) ?
    Tu sembles vouloir enfermer les dictionnaire dans des listes sans raison, est-ce aussi volontaire ?

  4. #4
    Membre expérimenté Avatar de cervo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 220
    Par défaut

    Je te propose d'utiliser le module shelve il est pratique pour des persistances, c'est un peu pareil à stocker des données dans une base ( shelve utilise un fichier qu'il cree lui meme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import shelve
     
     
    dico = {'projet': u'projet1', 
            'campagne': [{'iteration': [{'num': u'153', 
                                         'nom': u'beta1', 
                                         'emploi': [{'nom': 'emploi1', 
                                                     'propriété': [{'étape': u'etape1', 
                                                                    'motif': u'renvoi'}]}
     
    db = shelve.open('maBdPerso')
    db['dico'] = dico
    db.close()
    Pour récuperer tu feras simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import shelve
     
    db = shelve.open('maBdPerso')
    monDicoStocke = db['dico']
    db.close()
    tu peux utiliser toutes les donnée stockées tant que le fichier existe. Je pense que c'est plus pratique dans ton cas. shelve fonctionne lui meme comme un dictionnaire, donc pour avoir la liste de toutes les entrées (clés ) du fichier tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import shelve
    db = shelve.open('maBdPerso')
    listeDesCles = db.keys()  # Mais attention c'est un peu lent si ton fichier est volumineux
    La Doc sera plus complete que mes explications.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Tu peux bien sur enregistrer ce genre de données dans une base de données
    mais il faudrait que celle-ci soient claires pour toi.

    En clarifiant comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dico = {'projet': u'projet1', 
            'campagne': [{'iteration': [{'num': u'153', 
                                         'nom': u'beta1', 
                                         'emploi': [{'nom': 'emploi1', 
                                                     'propriété': [{'étape': u'etape1', 
                                                                    'motif': u'renvoi'}]}
    Il manque des crochets et parenthèses fermant, est-ce incomplet ou volontaire (donc beugué) ?
    Tu sembles vouloir enfermer les dictionnaire dans des listes sans raison, est-ce aussi volontaire ?
    Plusieurs choses:
    1/ J'ai voulu simplifier le dictionnaire car trop volumineux mais qui ressemble plus à sa:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    {
        "projet": "projet1",
        "identifiant": "X",
        "campagne": [
        	{
    	     "nom": "campagne1",
        	     "identifiant": "XX",
        	     "iteration": [
        		{
        			"nom": "beta1",
        			"identifiant": "XXX",
        			"emploi": [
        				{
    					"nom": "emploi1",
        					"propriete": [
            				         {
            						"etape": "etape1",
                				                "motif": "renvoi"
            					}
        					]
     
    				},
    				{
        					"nom": "emploi2",
        					"propriete": [
            					{
                				               "etape": "etape2",
                				               "motif": "admis"
            					}
        					]
    				}
    		     ]
                   }
     	   ]
    	}
         ]
    }
    Tu sembles vouloir enfermer les dictionnaire dans des listes sans raison, est-ce aussi volontaire?
    Comme j'ai une hiérarchie de données qui comprennent d'autres données je n'ai trouvé que cette façon de faire pour stocker de façon ordonnée mes élément.

    2/ Je préfererai utiliser une base de donnée de type sql lite de façon à pouvoir réutiliser les données dans le temps et de permettre à ce que ce soit plus exploitable pour d'autres personnes qui ne pige rien au python. Sachant que j'ai a l'esprit de mettre en place par la suite un affichage de ces données sur un serveur web pourquoi pas.

    3/ Mais revenant à mon prb qui est comment je peux stocker ce dictionnaire en base de donnée sachant que je suis novice dans ce domaine, ou alors le dictionnaire est peut être pas adéquat dans cette situation? Juste pour savoir si je m'y prend déja mal dès le départ

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    ton dictionnaire à l'air d'être une sorte d'arborescence.
    de mon point ede vue, un SGBD relationnel c'est pas l'idéal pour sauvegarder une arborescence, c'est possible mais c'est pas le plus naturel.

    le XML est une bonne solution pour stocker une arborescence, en plus c'est facile à mettre en place et c'est facilement lisible pour quelqu'un qui n'y connait rien en Python.

  7. #7
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour,

    Citation Envoyé par Tryph Voir le message
    Salut,

    ton dictionnaire à l'air d'être une sorte d'arborescence.
    de mon point ede vue, un SGBD relationnel c'est pas l'idéal pour sauvegarder une arborescence, c'est possible mais c'est pas le plus naturel.

    le XML est une bonne solution pour stocker une arborescence, en plus c'est facile à mettre en place et c'est facilement lisible pour quelqu'un qui n'y connait rien en Python.

    Et pour peu que :

    • tu modifies légèrement ton dictionnaire (une seule clé pour le dictionnaire de haut niveau, correpondant à la racine du XML)
    • tu utilises xmltodict


    ça se fait tout seul :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    >>> import xmltodict
    >>> dico = {
    ...     "projet": "projet1",
    ...     "identifiant": "X",
    ...     "campagne": [
    ...             {
    ...          "nom": "campagne1",
    ...                  "identifiant": "XX",
    ...                  "iteration": [
    ...                     {
    ...                             "nom": "beta1",
    ...                             "identifiant": "XXX",
    ...                             "emploi": [
    ...                                     {
    ...                                     "nom": "emploi1",
    ...                                             "propriete": [
    ...                                              {
    ...                                                     "etape": "etape1",
    ...                                                             "motif": "renvoi"
    ...                                             }
    ...                                             ]
    ...  
    ...                             },
    ...                             {
    ...                                             "nom": "emploi2",
    ...                                             "propriete": [
    ...                                             {
    ...                                                            "etape": "etape2",
    ...                                                            "motif": "admis"
    ...                                             }
    ...                                             ]
    ...                             }
    ...                  ]
    ...                }
    ...        ]
    ...     }
    ...      ]
    ... }
    ...
    >>> racine = { 'racine': dico }
    >>> with open('result.xml', 'w') as f:
    ...     print >> f, xmltodict.unparse(racine, pretty=True)
    ... 
    >>> 
    >>> _ = os.system('more result.xml')
    <?xml version="1.0" encoding="utf-8"?>
    <racine>
            <projet>projet1</projet>
            <campagne>
                    <nom>campagne1</nom>
                    <identifiant>XX</identifiant>
                    <iteration>
                            <emploi>
                                    <nom>emploi1</nom>
                                    <propriete>
                                            <etape>etape1</etape>
                                            <motif>renvoi</motif>
                                    </propriete>
                            </emploi>
                            <emploi>
                                    <nom>emploi2</nom>
                                    <propriete>
                                            <etape>etape2</etape>
                                            <motif>admis</motif>
                                    </propriete>
                            </emploi>
                            <nom>beta1</nom>
                            <identifiant>XXX</identifiant>
                    </iteration>
            </campagne>
            <identifiant>X</identifiant>
    </racine>
    >>>

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 742
    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 742
    Par défaut
    Salut,

    Citation Envoyé par kali38 Voir le message
    3/ Mais revenant à mon prb qui est comment je peux stocker ce dictionnaire en base de donnée sachant que je suis novice dans ce domaine, ou alors le dictionnaire est peut être pas adéquat dans cette situation? Juste pour savoir si je m'y prend déja mal dès le départ
    Votre truc n'est pas un dictionnaire mais une hiérarchie composite.
    Pour la stocker, il faut la sérialiser (vous avez les modules JSON ou shelve qui font cela très bien) ce qui consiste à transformer la structure en une chaine de caractères (qu'on saura interpréter pour reconstruire la structure ensuite) et à partir du moment ou c'est devenu "chaine de caractères", vous pouvez la stocker dans un fichier, dans une colonne d'une des tables d'un SGDB,....

    Ceci dit, on peut aussi dire que c'est une hiérarchie entre différentes relations/tables et en stocker les différents éléments dans plusieurs tables d'un SGDB.

    La vraie question est de savoir quels sont les traitements que vous allez faire et si vous allez ajouter supprimer des informations dans la hiérarchie. Auquel cas, il faut d'abord concevoir les relations de votre SGDB et vous faire aider dans la rubrique adhoc comment on fait cela.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/01/2012, 18h08
  2. stocker des fichiers dans une base de donnée MYSQL
    Par Invité(e) dans le forum MySQL
    Réponses: 5
    Dernier message: 03/12/2009, 13h10
  3. Stocker un tableau dans une base de données
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 23/12/2008, 21h16
  4. Stocker les sessions dans une base de données
    Par mic79 dans le forum Langage
    Réponses: 7
    Dernier message: 06/04/2006, 21h57
  5. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29

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