Supposing I have a model class:
class A(Model):
key1 = ...
key2 = ...
value1 = ...
I'd like to:
import pandas as pd
df = pd.DataFrame(data=..., index=['key1', 'key2'], columns=['value1'])
Model.update(value1=Case((A.key1, A.key2)), list(df.items()).where(...).execute()
but this doesn't work because Case
seems to accept only a single key, at least I couldn't find such detail in the documentation.
I need to lookup the error I am getting.
At the original poster's request, here is how you would do it with row tuples:
from peewee import *
db = SqliteDatabase(':memory:')
class Number(db.Model):
v1 = IntegerField()
v2 = IntegerField()
label = TextField(default='')
Number.create_table()
for i in range(1, 5):
Number.create(v1=i, v2=i)
label_expr = Case(Tuple(Number.v1, Number.v2), (
(Tuple(1, 1), 'one'),
(Tuple(2, 2), 'two'),
(Tuple(3, 3), 'three')), 'a lot')
Number.update(label=label_expr).execute()
for n in Number:
print(n.v1, n.v2, n.label)