Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

comment serializer/deserialier un fichier sqlite ?

+1 vote

Afin de fournir un exemple rapide de mini bdd sans faire telecharger de fichier 'ma_bdd.sqlite', je voudrai serializer ce fichier sur une string de quelque lignes.

Comment faire ?
Pour l' operation inverse ?

demandé 10-Nov-2016 par buffalo974 (2,956 points)

2 Réponses

+1 vote
 
Meilleure réponse

A mon avis, le plus simple dans ton cas c'est de transformer le fichier binaire en base64.

Pour l'encodage :

import base64
file = open('base.db', 'rb')
encoded = base64.b64encode(file.read())

Et le décodage :

import base64
file = open('base.db', 'wb')
file.write(base64.b64decode(encoded))
file.close()

Par contre soyons clair, la taille en octets de la chaîne sera forcément plus lourde que la base de données elle-même. Et en toute franchise, même une petite base sqlite fera plusieurs kilo-octets de caractères une fois encodée.

répondu 10-Nov-2016 par debnet (1,024 points)
sélectionné 13-Nov-2016 par buffalo974

La taille augmente d'un tiers par rapport au binaire, ce n'est pas si dramatique...

tres pratique la solution en base 64, pour la taille c'est pas grave, il s' agit d'une petite demonstration, ça peut meme tenir sur un coin de page HTML.

j'y aurai jamais pensé, pour une image oui, mais pas pour une bdd .
Fûté le debnet.

0 votes

Dans la doc officiel, ici, la fonction iterdump permet de transformer ta BDD en chaîne de caractères:

Returns an iterator to dump the database in an SQL text format. Useful
when saving an in-memory database for later restoration. This function
provides the same capabilities as the .dump command in the sqlite3
shell.

Exemple:

   # Convert file existing_db.db to SQL dump file dump.sql
    import sqlite3, os

    con = sqlite3.connect('existing_db.db')
    with open('dump.sql', 'w') as f:
        for line in con.iterdump():
            f.write('%s\n' % line)

En revanche, l’opération inverse consistant à charger le dump… Je n’ai pas encore trouvé.
Autre alternative: utiliser les commandes sqlite de backup et restauration.

Tu t’embêtes peut-être pour rien: le plus simple mais surtout le plus efficace restera le transfert de ton fichier sqlite binaire.

répondu 10-Nov-2016 par etno712 (288 points)
edité 10-Nov-2016 par etno712
...