6

私は、4 日間の制限時間で大規模な SQLite データベースを作成するスクリプトのプロトタイプを作成しています。スクリプトが終了する前に制限時間に達し、connection.commit() コマンドが実行されます。スクリプトはドロップされ、データベース接続は終了しましたが、ジャーナルはデータベースが作成されたファイル ディレクトリにまだ残っています。

現在のスクリプトが正しい軌道に乗っているかどうかを確認するために、既存のジャーナルをコミットしたいと思います。最初は試してみました(iPythonでPython sqlite3モジュールを使用):

connection = sqlite3.connect('mydatabase')

connection.commit()

しかし、既存のジャーナルをコミットすることを指定する必要があると思います。commit() でジャーナル名を引数として渡そうとしましたが、sqlite3 Python モジュールの commit() は引数を取りません。

将来的には、段階的に .commit() します

4

1 に答える 1

5

SQLite がデータベースを変更するとき、いくつかの新しいデータが SQLite のキャッシュにあり、他の新しいデータがディスクに書き込まれます。トランザクションの途中で SQLite が強制終了されると、キャッシュ内のすべてのデータが失われるため、データベースの状態に一貫性がなくなります。その場合、唯一のオプションは、トランザクションをロールバックして一貫性のある状態に戻すことです。

-journalファイルには実際には古いデータが含まれており、新しいデータは実際の DB ファイルに書き込まれています。部分的なトランザクションによって行われた変更を本当に確認したい場合は、-journalファイルを削除してから (SQLite が自動的にロールバックを実行するのを防ぎます)、データベースを開くことができますが、データベースの状態に一貫性がないため、おそらくすべてのデータにアクセスすることはできません。

于 2012-11-07T08:27:25.797 に答える