使用Peewee库进行批量更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Peewee库进行批量更新相关的知识,希望对你有一定的参考价值。

我正在尝试使用Peewee库更新表中的许多记录。在for循环中,我获取单个记录,然后我更新它,但这在性能方面听起来很糟糕所以我需要批量更新。当前代码如下所示:

usernames_to_update = get_target_usernames()
for username in usernames_to_update:
    user = User.get(User.username == username) # username is primary key
    if user.type == 'type_1':
        user.some_attr_1 = some_value_1
    elif user.type == 'type_2':
        user.some_attr_2 = some_value_2
    # elif ....
    user.save()

documentation,有insert_many功能,但没有像update_many。搜索我提出了这些解决方案:

  1. 使用CASE执行原始查询:Link
  2. 使用replace_manyLink
  3. 使用updateLink

但是我找不到任何关于如何使用第二种或第三种解决方案的例子。有人可以澄清案例2和3是如何使用的吗?

答案

你想要.update()方法:

query = User.update(validated=True).where(User.username.in_(usernames_to_update))
query.execute()

编辑:因此您希望在更新期间有条件地设置值。你可以使用Case助手。未经测试:

some_value_1 = 'foo'
some_value_2 = 'bar'
case_stmt = Case(User.type, [
    ('type_1', some_value_1),
    ('type_2', some_value_2)])
query = User.update(some_field=case_stmt).where(User.username.in_(list_of_usernames))
query.execute()

文档可以在这里找到:http://docs.peewee-orm.com/en/latest/peewee/api.html#Case

以上是关于使用Peewee库进行批量更新的主要内容,如果未能解决你的问题,请参考以下文章

python-轻量级ORM库peewee的使用

python-轻量级ORM库peewee的使用

EXAMPLE FOR PEEWEE 多姿势使用 PEEWEE

SQL /peewee。如何根据另一个表的条件更新记录?

使用标准库Ruby将数据标记到Elasticsearch批量中

Mybaits的批量操作包括批量删除 批量增加和批量更新