3

スクリプト(snapshot.dbとsync_conf.db)を介して同期フォルダをリダイレクトするためにGoogleドライブで使用される2つのデータベースファイルを変更しようとしています。特定のsqliteブラウザ(すべてではない)でファイルを開くことはできますが、Pythonでクエリを実行することはできません。私はただメッセージを受け取ります:sqlite3.DatabaseError: file is encrypted or is not a database

どうやらグーグルはデータベースでログ先行書き込み(WAL)構成を使用しており、データベースに対して(sqlite.orgによると)実行することでオフにすることができますがPRAGMA journal_mode=DELETE;、データベースに対してそれを実行する方法がわかりませんPythonがそれを読み取れない場合。

これが私が持っているものです(PRAGMAコマンドを実行し、コミットしてから再度開いてみましたが、機能しませんでした):

import sqlite3

snapShot = 'C:\Documents and Settings\user\Local Settings\Application Data\Google\Drive\snapshot.db'
sync_conf = 'C:\Documents and Settings\user\Local Settings\Application Data\Google\Drive\sync_config.db'
sync_folder_path = 'H:\Google Drive'

conn = sqlite3.connect(snapShot)

cursor = conn.cursor()
#cursor.execute('PRAGMA journal_mode=DELETE;')
#conn.commit()
#conn= sqlite3.connect(snapShot)
#cursor = conn.cursor()
query = "UPDATE local_entry SET filename = '\\?\\" + sync_folder_path +"' WHERE filename ='\\?\C:Users\\admin\Google Drive'"
print query
cursor.execute(query)
4

2 に答える 2

4

問題が解決しました。http://www.sqlite.org/download.htmlから最新バージョンのsqliteをダウンロードし、python27/DLLディレクトリの古い.dllを上書きしました。現在は正常に動作しています。

なんて厄介なことでしょう。

于 2012-07-12T17:41:01.583 に答える
1

journal_modeプラグマによってsqlite3がデータベースを開くことができなくなるとは思わない。おそらくあなたはsqlite3libの過度に古いバージョンを使用していますか?どのバージョンのPythonを使用していて、どのバージョンのsqlite3ライブラリを使用していますか?

import sqlite3
print sqlite3.version
于 2012-07-12T17:02:50.903 に答える