2016-09-03 2 views
2

Я нашел this handy answer о том, как создать новую запись в таблице с использованием словаря.Peewee - Обновить запись с помощью словаря

Теперь я хотел бы обновить запись с тем же методом. но я не знаю, как адресовать конкретную запись в таблице, которую я хотел бы обновить.

Моя текущая версия выглядит следующим образом:

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» с вышеупомянутой двойной звездочкой like in this answer. Но я не могу найти proper method in the docs.

Кто-нибудь знает, как это осуществить?

Благодарим за помощь!

Muff

ответ

2

Чтобы обновить объект, вы можете:

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.

2

Двойная звезда ярлык питон вещь. Это позволяет вам развернуть словарь в аргументы ключевого слова в методе. Это означает, что вы можете сделать что-то вроде этого:

fruit = { "name": "Banana", "color": "yellow"} 
some_method(**fruit) 

которая была бы equivelent делать:

some_method(name="Banana", color="yellow") 

Я не думаю, что это полезно для вас, хотя здесь. Вы уже обновили значения в выбранной записи, и все, что вам нужно сделать, это сохранить их.

According to the peewee docs, как только вы создали экземпляр, любые вызовы сохранения приведут к обновлению этого экземпляра. Это означает, что вам нужно только вызвать метод save для обновления значений, которые вы изменили. Если вы добавите окончательный entries[entry_index].save(), это должно сохранить эти изменения.