Peewee - 使用字典更新条目

3
我在如何使用字典创建新表格条目方面找到了这个有用的答案
现在我想使用相同的方法更新一个条目,但我不知道如何寻址我想要更新的特定表格条目。
我的当前版本如下:
entries = Fruit.select().order_by(Fruit.name.desc())
#... all entries are listed with the index number
entry_index = int(input("Please enter entry number: "))
#...
entry_index -= 1

name = "Banana"
color = "yellow"

if input('Update entry? [Yn] ').lower() != 'n':
        entries[entry_index].name = name
        entries[entry_index].color = color

正如您所看到的,我明确地处理了每个字段。我想将变量(名称、颜色)放入字典中,并使用上述双星号快捷方式(就像在此答案中一样)更新位置为“entry_index”的条目。但我在文档中找不到适当的方法

有人知道如何实现吗?

感谢您的帮助!

Muff

2个回答

8

要更新一个对象,您可以采用以下方法:

entry = entries_index[idx]
entry.something = 'new value'
entry.another_thing = 'another thing'
entry.save()

或者:

Entry.update(**{'something': 'new value', 'another_thing': 'another'}).where(Entry.id == entry.id).execute()

以上所有内容均在文档中有详细介绍,请仔细阅读。请按照快速入门一步步操作,相信您会更加清楚如何使用peewee。


只是想知道,在字典中包含一个未在模型中找到的名称/值对的情况下,预期的行为会是什么?它会被简单地忽略吗? - QA Collective

6
双星号快捷方式是Python中的一种语法。它允许您将字典扩展为方法中的关键字参数。这意味着您可以像这样做:
fruit = { "name": "Banana", "color": "yellow"}
some_method(**fruit)

这相当于执行以下操作:
some_method(name="Banana", color="yellow")

我认为这对你在这里没有帮助。你已经更新了所选条目的值,下一步只需要保存它们。

根据peewee文档,一旦创建了实例,任何调用保存的操作都会导致该实例被更新。这意味着你只需要调用save方法来更新你已更改的值。如果你添加一个最终的entries[entry_index].save(),那么就应该保存这些更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接