3

我正在尝试修改 Google Drive 使用的两个数据库文件,以通过脚本(snapshot.db 和 sync_conf.db)重定向我的同步文件夹。虽然我可以在某些 sqlite 浏览器(不是全部)中打开文件,但我无法让 python 执行查询。我刚收到消息:sqlite3.DatabaseError: file is encrypted or is not a database

显然谷歌正在数据库上使用预写日志(WAL)配置,可以通过对数据库运行PRAGMA journal_mode=DELETE;(根据 sqlite.org)来关闭它,但我不知道如何对数据库运行它如果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 根本无法打开数据库。也许您使用的是过旧版本的 sqlite3 库?您使用的是什么版本的 Python,以及什么版本的 sqlite3 库?

import sqlite3
print sqlite3.version
于 2012-07-12T17:02:50.903 回答