Skip to main content
 首页 » 编程设计

python之SQLObject之更新多条记录

2025年05月04日8小虾米

我正在使用带有 sqlite 数据库的 SQLObject 来存储文档记录。已扫描的文档将文档信息存储在文本文件中。我需要读取所有这些文本文件(大约 800 个)并从中加载文档记录(每个文件平均 40 个文档)。 目前我的代码如下(文档是表格):-

    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 在添加记录时似乎仍然很慢。

请您参考如下方法:

第一,不要一一更新列。而不是

    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'], 
    ) 

这会发送一个更新而不是一打。

第二,大量插入使用SQLBuilder .它不太方便,但速度更快。