Utilisation de Shelve pour enregistrer des objets en Python

Shelve est un module Python puissant pour la persistance des objets. Lorsque vous rangez un objet, vous devez affecter une clé par laquelle la valeur de l'objet est connue. De cette façon, le fichier Shelve devient une base de données de valeurs stockées, accessibles à tout moment.

Exemple de code pour Shelve en Python

Pour classer un objet, importez d'abord le module, puis affectez la valeur de l'objet comme suit:

 étagère d'importation
base de données = shelve.open (filename.suffix)
object = Object ()
base de données ['clé'] = objet

Si vous souhaitez conserver une base de données de stocks, par exemple, vous pouvez adapter le code suivant:

 étagère d'importation
stockvalues_db = shelve.open ('stockvalues.db')
object_ibm = Values.ibm ()
stockvalues_db ['ibm'] = object_ibm
object_vmw = Values.vmw ()
stockvalues_db ['vmw'] = object_vmw
object_db = Values.db ()
stockvalues_db ['db'] = object_db

Un "stock values.db" est déjà ouvert, vous n'avez pas besoin de l'ouvrir à nouveau. Au contraire, vous pouvez ouvrir plusieurs bases de données à la fois, écrire dans chacune d'elles à volonté et quitter Python pour les fermer à la fin du programme. Vous pouvez, par exemple, conserver une base de données distincte de noms pour chaque symbole, en ajoutant ce qui suit au code précédent:

 ## en supposant que le rayonnage est déjà importé
stocknames_db = shelve.open ('stocknames.db')
objectname_ibm = Names.ibm ()
stocknames_db ['ibm'] = nom_objet_ibm
objectname_vmw = Names.vmw ()
stocknames_db ['vmw'] = nom_objet_vmw
objectname_db = Names.db ()
stocknames_db ['db'] = nom_objet_db

Notez que toute modification du nom ou du suffixe du fichier de base de données constitue un fichier différent et, par conséquent, une base de données différente.

Le résultat est un deuxième fichier de base de données contenant les valeurs données. Contrairement à la plupart des fichiers écrits dans des formats auto-stylisés, les bases de données en attente sont enregistrées sous forme binaire.

Une fois les données écrites dans le fichier, elles peuvent être rappelées à tout moment. Si vous souhaitez restaurer les données dans une session ultérieure, vous rouvrez le fichier. S'il s'agit de la même session, rappelez simplement la valeur; les fichiers de la base de données Shelve sont ouverts en mode lecture-écriture. Voici la syntaxe de base pour y parvenir:

 étagère d'importation
base de données = shelve.open (filename.suffix)
objet = base de données ['clé']

Ainsi, un exemple de l'exemple précédent se lirait:

 étagère d'importation
stockname_file = shelve.open ('stocknames.db')
stockname_ibm = stockname_file ['ibm']
stockname_db = stockname_file ['db']

Considérations avec Shelve

Il est important de noter que la base de données reste ouverte jusqu'à ce que vous la fermiez (ou jusqu'à ce que le programme se termine). Par conséquent, si vous écrivez un programme de n'importe quelle taille, vous souhaitez fermer la base de données après l'avoir utilisée. Sinon, la base de données entière (pas seulement la valeur que vous voulez) se trouve en mémoire et consomme des ressources informatiques.

Pour fermer un fichier Shelve, utilisez la syntaxe suivante:

 database.close () 

Si tous les exemples de code ci-dessus étaient incorporés dans un seul programme, nous aurions deux fichiers de base de données ouverts et consommant de la mémoire à ce stade. Ainsi, après avoir lu les noms de stock dans l'exemple précédent, vous pouvez ensuite fermer chaque base de données à tour de rôle comme suit:

 stockvalues_db.close ()
stocknames_db.close ()
stockname_file.close ()