Python sqlite3 在 Windows 上“无法打开数据库文件”
我在一台运行Windows Vista的电脑上,用Python 3.1.1写程序。我想往一个SQLite3数据库里插入很多行数据。这个数据库文件是存在的,我的程序确实能成功插入一些行数据。但是在插入的过程中,程序突然崩溃,显示这个错误信息:
sqlite3.OperationalError: 无法打开数据库文件
不过在崩溃之前,确实有几行数据成功添加到了数据库里。
下面是专门处理插入操作的代码:
idx = 0
lst_to_ins = []
for addl_img in all_jpegs:
lst_to_ins.append((addl_img['col1'], addl_img['col2']))
idx = idx + 1
if idx % 10 == 0:
logging.debug('adding rows [%s]', lst_to_ins)
conn.executemany(ins_sql, lst_to_ins)
conn.commit()
lst_to_ins = []
logging.debug('added 10 rows [%d]', idx)
if len(lst_to_ins) > 0:
conn.executemany(ins_sql, lst_to_ins)
conn.commit()
logging.debug('adding the last few rows to the db')
这段代码每次能插入10到400行数据,然后就会出现错误信息:
conn.executemany(ins_sql, lst_to_ins)
sqlite3.OperationalError: unable to open database file
为什么我能插入一些行数据,但之后又会出现这个错误呢?
2 个回答
0
在Windows 7上,我也遇到了同样的错误(使用的是Python 2.6、Django 1.1.1和SQLite)。在插入了一些记录后,出现了这个错误:sqlite3.OperationalError: 无法打开数据库文件。
我在Eclipse中运行我的脚本多次,始终都出现这个错误。但是当我在命令行中运行它(设置了PYTHONPATH和DJANGO_SETTINGS_MODULE之后),它就顺利运行了...
这只是我个人的一点看法!
1
SQLite没有记录锁定的功能;它使用一种简单的锁定机制,在写入数据时会暂时锁住整个数据库文件。这听起来像是你遇到了一个还没有解除的锁。
SQLite的作者建议你在插入数据之前先创建一个事务,然后在最后完成这个事务。这样做可以让SQLite把插入请求排队,并在事务提交时使用一个文件锁来执行这些请求。
在最新版本的SQLite中,锁定机制得到了增强,所以可能不再需要完全锁住整个文件了。