【发布时间】:2015-09-03 22:38:53
【问题描述】:
我收到了一个需要用 Python 读取的 sqlite 文件。
我可以使用“DB Browser for SQLite”应用程序打开文件。我可以看到表结构并在该应用程序中执行选择语句。所以文件看起来没问题。 (我没有创建它,也不知道它是如何创建的。)
但是,当我尝试从 Python 中读取它时,我得到一个错误:
sqlite3.DatabaseError: 文件已加密或不是数据库
import sqlite3 as lite
sqlite3.sqlite_version
# '3.6.21'
con = lite.connect('path\file.sqlite')
cur = con.cursor()
cur.execute('SELECT * from mytable')
# sqlite3.DatabaseError: file is encrypted or is not a database
如果我使用文本编辑器打开文件,那么第一个单词是“SQLite 格式 3”,然后是不可读的文本。所以它是用版本 3 生成的?不确定是否需要转成db文件?
我不知道从这里去哪里。
【问题讨论】:
-
\f是换页的控制字符。参考:en.wikipedia.org/wiki/Control_character#In_ASCII 您可以使用原始字符串或更好的是使用os.path.join。 -
如果我 CD 到目录并提供不带任何 \ 的文件名,则会出现同样的错误。另外,如果我提供的文件名不存在,那么错误会有所不同,所以我认为它正在查找文件。
-
您可以使用 sqlite 浏览器将数据库转储到 SQL,至少您可以看到其中的内容并将其加载回 sqlite,希望以一种可以让您从 Python 打开它的方式。
-
这有效:导出到 sql 然后再次导入。 Python 会打开它。奇怪!
-
你的旧 Python 附带一个旧 SQLite,它显然不支持 DB Browser 使用的某些新功能。