假设我的数据模型:
class Book(Model):
id = PrimaryKeyField()
title = CharField(max_length=64, unique=True)
author = CharField(max_length=64)
publisher = CharField(max_length=64)
price = DecimalField(max_digits=10, decimal_places=2)
desc = CharField(max_length=256)
如果我要根据条件更新的话, 找了很多文档基本都是:
Book.update({Book.price: 29.9}).where(Book.author == '鲁迅')
但外部调用的话只能提供字段名比如 {'price': 29.9}, {'author': '鲁迅'}, 怎样才能拼出上边的语句?
1
111111111111 2020-07-02 00:56:58 +08:00 via Android
getattr?
|
2
Trim21 2020-07-02 01:00:05 +08:00 via Android
{getattr(Book, key): value for key, value in updater.items()}
|
5
chenqh 2020-07-02 17:28:47 +08:00
peewee 支持 dict 的类型的
比如 ``` Book.update(price=29.9).where(author__eq="鲁迅") ``` |
7
vegetableChick 2020-07-03 11:07:07 +08:00
condition_dict = {"author":"鲁迅", "id":1}
q = Book.update({"price":30}).where( *[ getattr(Book, key) == value for key, value in condition_dict.items() ] ) q.execute() 像是这样么 ~ |