2012-03-18 6 views
1

私がする必要があるのは、sqlite3データベースをディスクからメモリにロードし、そのディスクを使って作業し、スクリプト終了時にインメモリデータベースをディスクに保存することです。これをどうやってやりますか?ありがとう!ディスクからsqlite3データベースを取得し、メモリにロードしてディスクに保存しますか?

+0

ディスク:http://stackoverflow.com/questions/3850022/how-to-load-existing-db-file-to-memory-in-python-sqlite3 –

答えて

1

あなたがする必要があるのは、データベースにconnectです。これで、あなたは何でもしたいことができます。

from sqlite3 import connect 

conn = connect("/path/to/your/sqlite.db") 
# Do what you need to with the database here 
# Changes (inserts, updates, etc) will be persisted 
# to disk whenever you commit a transaction. 

あなたが一連のコマンドを実行し、もう1つはあなたがtransactionを使用する必要があります成功しない場合、それらすべてをロールバックできるようにする必要がある場合。

あなたは、既存のデータベースのコピーを作成し、それに変更を加えると、その後別の場所に保存する必要がある場合は変更は、あなたは、次のいずれかを実行することができますを成功した場合にのみ:

  • を作成します。インメモリデータベースを作成し、SQLiteのATTATCH DATABASEコマンドを使用して、既存のデータベースを新しいインメモリデータベースにアタッチします。すべてのデータを既存のデータベースからメモリ内のデータベースにコピーして変換したら、新しいデータベースを追加してすべてをコピーすることができます。
  • 既存のデータベースファイルをコピーし、変更を試みて、操作が成功しなかった場合は新しいファイルを削除してください。
  • 使用sqlite3Connection.iterdumpは、あなたがして(インメモリまたはあなたの新しいデータベースのディスク上の接続文字列のいずれかを使用して)this answer suggestsとしてsqlite3.Cursor.executescriptに渡すことができるSQLスクリプトとしてテーブルの内容を取得します。メモリへ
+1

しかし、私はそれを照会するたびに、それディスク上のファイルを照会します。私はこれが記憶に(私はそれが速いと聞いた)実行したい。 –

+0

@Fike - ディスクIOがあなたのボトルネックであることを知っていない限り、おそらくこの最適化を行う必要はありませんが、私はあなたにいくつかの提案を与えました:-) –

+1

@Sean Vieira感情、あなたは技術的に彼の質問に答えなかった。本当の答えを探している人のために、私はまだそれをテストしていませんが、これはそれを行うための一つの方法です:http://stackoverflow.com/a/10856450/353094 – leetNightshade

関連する問題