如何在Python中加速将QuerySet对象转换为JSON数组的过程

2024-05-29 02:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用exchangelib获取电子邮件。我的函数在一秒钟内检索近150000封电子邮件(输出类型为查询集)。我必须将查询集转换为JSON数组,以便进一步处理它。现在将QuerySet obj转换为JSON数组大约需要一个小时,但我希望这种转换在几秒钟内完成

示例代码:

MailsArray = []
query_filter = Q(sender=xyz@abc.com)
timeLimit = UTC_NOW() - timedelta(hours=1)

# This step returns data in seconds
Inbox_mails = account.inbox.all().filter(query_filter,datetime_received_gt=timeLimit).only('subject','sender','conversation_id')

# This step takes a lot of time
for x in Inbox_mails:
    MailsArray.append( {"Subject":x.subject,"ID":x.conversation_id.id})

任何关于快速将QuerySet数据转换为JSON数组的想法都将不胜感激


Tags: inidjsonstep数组filterthisquery
2条回答

正如杰罗尼莫暗示的那样,创建Inbox_mails实际上并不能获取电子邮件。这只是一个queryset定义,当您在Inbox_mails对象上迭代时,就会实际获取项。问题不在于转换为JSON,而在于获取数据

15万封电子邮件太多了,不管你怎么做,可能都会很慢。但您可以尝试更改用于获取项目的分页大小。参见https://ecederstrand.github.io/exchangelib/#paging如何做到这一点

我建议使用Django REST框架:DRF Serializer

您可以轻松创建序列化程序,而且很有可能它会更快地处理它

相关问题 更多 >

    热门问题