2012-11-29 138 views
2

我正在使用sqlite數據庫來存儲文檔記錄。文件已被掃描存儲在文本文件中的文件信息。我需要閱讀所有這些文本文件(大約800)並從它們中加載文檔記錄(每個文件平均40個文檔)。 目前我的代碼如下所示(文件表): -SQLObject - 更新許多記錄

for doc in cc.documents: 
     print doc['id'] 
     doc_recs = Document.selectBy(costcode = x, doc_id = int(doc['id'])) 
     dcmnt = doc_recs.getOne(None) 
     if not dcmnt: 
     dcmnt = Document(costcode = x, doc_id = int(doc['id'])) 

     dcmnt.title = doc['title'] 
     dcmnt.author = doc['author'] 
     dcmnt.recipient = doc['recipient'] 
     dcmnt.date = doc['date'] 
     dcmnt.firstpage = doc['firstpage'] 
     dcmnt.lastpage = doc['lastpage'] 
     dcmnt.type = doc['type'] 
     dcmnt.allpages = doc['allpages'] 

但這需要很長的時間,並與每個記錄變得越來越長。

推測SQLObject每次更改屬性都會提交記錄,這是浪費的。如果我只是添加記錄,我可以在創建記錄的同時創建屬性,這應該會更快,但SQLObjects在添加記錄時似乎很慢。

回答

0

1,不要逐個更新列。取而代之的

dcmnt.title = doc['title'] 
    dcmnt.author = doc['author'] 

dcmnt.set(
     title = doc['title'], 
     author = doc['author'], 
     recipient = doc['recipient'], 
     date = doc['date'], 
     firstpage = doc['firstpage'], 
     lastpage = doc['lastpage'], 
     type = doc['type'], 
     allpages = doc['allpages'], 
    ) 

這發出一個更新,而不是一打的。

2nd,用於批量插入使用SQLBuilder。它不太方便,但更快。