我创建了一个sqlite数据库并将其上传到主机。
然后我从我的脚本中检索它并尝试插入一些数据,但execute()返回
DatabaseError (file is encrypted or is not a database).
urllib.urlretrieve('http://%s/%s' % (HOST, NAME_DB), NAME_DB)
con = sqlite3.connect(NAME_DB)
cur = con.cursor()
cur.execute('insert into log(date, count, average) values(date("now"), ?, ?)', (1, 1.2))
con.commit()
con.close()
Traceback (most recent call last):
File "mylog.py", line 17, in <module>
cur.execute('insert into log(date, count, average) values(date("now"), ?, ?)', (1, 1.2))
sqlite3.DatabaseError: file is encrypted or is not a database
如果我使用sqlite CLI插入数据,则不会发生此类错误。你能帮我吗?
答案 0 :(得分:8)
sqlite CLI和python sqlite API之间的版本不匹配?我再次从脚本而不是CLI创建了我的数据库。现在从脚本插入并选择工作,但不是从CLI。 $sqlite -version
返回2.8.17,而python版本是2.7.3。
答案 1 :(得分:3)
我的C ++代码使用SQLite3库创建的数据库遇到了同样的问题,后者后来被Python 2.7版本的SQLite3访问。我无法在Python脚本中查询数据库。为了解决我的计算机上的问题,我更改了以下版本:
C:\ Python27 \的DLL \ sqlite3.dll
在C ++ Sqlite库目录中找到的版本。
答案 2 :(得分:0)
好的,我遇到了同样的问题,正如Visionnaire所说,只需将sqlite3.dll
中的pythonXX\DLLs
替换为最初包含{{1}的CLI sqlite3.dll
文件夹中的sqllite
sqlite3.exe
问题解决了
答案 3 :(得分:0)
我遇到了同样的问题,我认为我正在处理的sqlite3数据库出了点问题。但是看来,我不小心覆盖了另一个sqlite3.db文件(该文件存在于我的项目中)作为ASCII。我不知道该错误是来自另一个数据库。 注意:)