2

ドキュメントレコードを保存するために、sqlite データベースで SQLObject を使用しています。文書は、テキストファイルに保存された文書情報をスキャンしたものです。これらすべてのテキスト ファイル (約 800) を読み取り、それらからドキュメント レコードを読み込む必要があります (1 ファイルあたり平均 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 はレコードを追加するのが遅いようです。

4

1 に答える 1

0

第 1 に、列を 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'],
    )

これにより、ダースではなく 1 つの UPDATE が送信されます。

2番目に、一括挿入にはSQLBuilderを使用します。便利ではありませんが、はるかに高速です。

于 2017-05-07T21:41:00.623 に答える