【发布时间】:2019-02-22 10:48:43
【问题描述】:
我正在尝试使用 lotusscript 和 Python(noteslib 模块)从视图(Lotus Notes)中获取所有数据并将其导出到 csv,但问题是这需要太多时间。我尝试了两种循环遍历所有文档的方法:
import noteslib
db = noteslib.Database('database','file.nsf')
view = db.GetView('My View')
doc = view.GetFirstDocument()
data = list()
while doc:
data.append(doc.ColumnValues)
doc = view.GetNextDocument(doc)
要获取大约 1000 行数据,我花了 70 秒,但视图大约有 85000 行,所以获取所有数据将太多时间,因为当我在 Lotus Notes 中手动使用 File->Export 时,大约需要 2 分钟将所有数据导出到 csv。
我用 AllEntries 尝试了第二种方法,但速度更慢:
database = []
ec = view.AllEntries
ent = ec.Getfirstentry()
while ent:
row = []
for v in ent.Columnvalues:
row.append(v)
database.append(row)
ent = ec.GetNextEntry(ent)
我在 Internet 上找到的所有内容都基于“NextDocument”或“AllEntries”。有什么方法可以更快吗?
【问题讨论】:
-
如果您使用的是 LotusScript,我建议您使用
NotesViewNavigator。这非常有效,但我不知道Python模块是否有类似的东西。 Fwiw,这是NotesViewNavigator上的文档:ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/… -
感谢您的回复。在 Python 中,我可以使用 LotusNotes 中的每个 COM 类。我尝试使用NotesViewNavigator,问题是时间与其他方法类似。也许这是正常的,我期望太高了?这是我的代码:
db = noteslib.CurrentDatabase view = db.GetView('My view') nav = view.CreateViewNav() doc = nav.GetFirst() view.AutoUpdate = False list_of_data = [] for i in range(1000): list_of_data.append(doc.ColumnValues) doc = nav.Getnext(doc)获取 1000 行数据大约需要 146 秒。 -
您的代码在哪里运行?直接在 Domino 服务器上还是在客户端上?
-
我是 Domino 客户端的普通用户,我的 IT 团队告诉我们,他们不会创建代理来为我们获取数据。所以我想自己做,我没有Domino服务器的权限。
-
那我建议本地复制数据库..
标签: python lotus-domino lotusscript