這發生在python 2.6.6,sqlite3。 我有一個使用sqlite的db類。以下是它的init的一部分。我偶爾得到這個錯誤:sqlite3.OperationalError:無法打開數據庫文件
def _init_db(self):
"init the database tables and indices"
print '\n'.join(DROP_TABLES[0:1])
print '\n'.join(CREATE_TABLES[0:1])
print '\n'.join(CREATE_INDEXES[0:1])
print '\n'.join(CREATE_TRIGGERS[0:1])
for query in DROP_TABLES:
self.connection.execute(query)
# self.connection.commit()
for query in CREATE_TABLES:
self.connection.execute(query)
# self.connection.commit()
for query in CREATE_INDEXES:
self.connection.execute(query)
# self.connection.commit()
for query in CREATE_TRIGGERS:
self.connection.execute(query)
self.connection.commit()
這裏是打印輸出的查詢。 (它不是在我看來非常重要的,是爲了完整性)
DROP TABLE IF EXISTS graph_T
CREATE TABLE IF NOT EXISTS graph_T
(v1 int,
v2 int,
step_start int,
step_end int DEFAULT 2147483647,
value int DEFAULT 1,
path_kind int DEFAULT 0,
path_id long,
partial_path_id long)
CREATE INDEX IF NOT EXISTS idxgraph_T
ON graph_T(v1,v2)
CREATE TRIGGER IF NOT EXISTS trig_graph_T_path_id
AFTER INSERT ON graph_T
BEGIN
UPDATE graph_T SET
path_id = (10000 * 10000 * max(new.v1, new.v2) +
10000 * min(new.v1, new.v2) + 0) ,
partial_path_id = 10000 * 10000 * max(new.v1, new.v2) +
10000 * min(new.v1, new.v2)
WHERE rowid = new.rowid;
END;
我得到sqlite3.OperationalError:無法打開的self.connection.execute線的一個數據庫文件。有時是第三或第四(它也發生在我的程序中的其他地方)。
我在windows上工作。我不知道爲什麼會發生這種情況,我做錯了什麼。 希望有任何建議。
更多信息(由於提問的問題): - 我沒有使用併發訪問。沒有線程或任何類型的東西。
edit-更多信息:我在所有connection.execute行上添加了定時重試,它通常會失敗一次或兩次,然後工作。我猜測,執行命令返回時,可能數據不是實際上是寫入磁盤。
網絡驅動器? – wberry
沒有。不錯的猜測雖然... –