70 votes

Comment charger un fichier db existant en mémoire dans Python sqlite3?

J'ai un sqlite3 existant, sur lequel je dois faire des calculs approfondis. Faire les calculs à partir du fichier est extrêmement lent, et comme le fichier n'est pas volumineux (~ 10 MB ), il ne devrait donc pas y avoir de problème pour le charger en mémoire.

Existe-t-il un moyen Pythonic de charger le fichier existant en mémoire afin d'accélérer les calculs ?

123voto

Cenk Alti Points 656

Voici l'extrait que j'ai écrit pour mon application de flacon :

 import sqlite3
from io import StringIO

def init_sqlite_db(app):
    # Read database to tempfile
    con = sqlite3.connect(app.config['SQLITE_DATABASE'])
    tempfile = StringIO()
    for line in con.iterdump():
        tempfile.write('%s\n' % line)
    con.close()
    tempfile.seek(0)

    # Create a database in memory and import from tempfile
    app.sqlite = sqlite3.connect(":memory:")
    app.sqlite.cursor().executescript(tempfile.read())
    app.sqlite.commit()
    app.sqlite.row_factory = sqlite3.Row

28voto

thinwybk Points 530

Etsqlite3.Connection.backup(...) ? "Cette méthode effectue une sauvegarde d'une base de données SQLite même lorsqu'elle est accessible par d'autres clients, ou simultanément par la même connexion." Disponibilité : SQLite 3.6.11 ou supérieur. Nouveau dans la version 3.7.

 import sqlite3

source = sqlite3.connect('existing_db.db')
dest = sqlite3.connect(':memory:')
source.backup(dest)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X