gpt4 book ai didi

python - 从字典列表更新数据库

转载 作者:可可西里 更新时间:2023-11-01 10:42:23 26 4
gpt4 key购买 nike

在 Python 中,我有一个字典列表。该列表称为 members,每个成员都有一个唯一的 id。例如,列表可能如下所示:

members = [{'id':1, 'val1':10, 'val2':11},
{'id':2, 'val1':2, 'val2':34},
{'id':3, 'val1':350, 'val2':9}]

我想用成员列表更新我的收藏,根据需要更新和插入新条目。

我需要遍历成员,还是有更快的方法?

这是我的尝试,它似乎做了我想做的,但需要一段时间:

for m in members: 
collection.update_one( {'id':m['id']}, {'$set': m)}, upsert = True)

请注意,这需要用不同的值更新每个数据库条目,即与其 id 对应的值。

最佳答案

对于现代 pymongo,您可以使用 .bulk_write()ReplaceOne批量写入操作,在您的特定情况下,或其他适当的操作

from pymongo import MongoClient
from pymongo import ReplaceOne

client = MongoClient()

db = client.test

members = [
{ 'id': 1, 'val1': 10, 'val2': 11 },
{ 'id': 2, 'val1': 2, 'val2': 34 },
{ 'id': 3, 'val1': 350, 'val2': 9 }
]

db.testcol.bulk_write([
ReplaceOne(
{ "id": m['id'] },
m,
upsert=True
)
for m in members
])

理想情况下,您不会从源“列表”中进行处理,而是读取一些外部“流”以降低内存需求。以类似的方式,您只需为 1000 操作构建操作列表参数,然后调用 .bulk_write()仅每 1000 个发送到服务器。

但重点在于 .bulk_write()您一次发送所有“批处理”并且只有一个响应,而不是作为单独的请求和单独的响应,这会产生开销并花费时间。

同样使用这个 API 方法实际上使用了 "Bulk API"在受支持的服务器中处于下方,但当服务器版本不支持“批量”方法时,会降级为为您单独调用。

关于python - 从字典列表更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36542746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com