база данных выглядит так:
date value
2000-01-01 foo
2000-01-01 foo
2000-01-01 foo
2000-01-02 bar
2000-01-02 bar
2000-01-02 bar
2000-01-10 yyy
2000-01-10 yyy
2000-01-10 yyy
Кадр данных Pandas MyDataframe
выглядит так:
date value
2000-01-01 new_foo
2000-01-02 new_bar
2000-01-10 new_yyy
Как вы могли догадаться, мне нужно, чтобы база данных выглядела так:
date value
2000-01-01 new_foo
2000-01-01 new_foo
2000-01-01 new_foo
2000-01-02 new_bar
ecc...
Я мог бы перебрать MyDataframe
и запустить серию .update
:
for date, value in MyDataframe:
query = MyModel.update(value=value).where(MyModel.date == date).execute()
query.execute()
Мой вопрос: есть ли способ сделать это всего одним вызовом execute()
(или любым другим более эффективным способом)? Что-то вроде bulk_execute(array_of_queries)
?
Есть ли способ напрямую передать кадр данных в .update()? Как это:
MyModel.update(value=MyDataframe.loc[MyModel.date]).execute()
К сожалению, это не работает: индекс, переданный .loc[]
, является не фактическим значением, а объектом DateTimeField
. Действительно, выдает такую ошибку:
KeyError('the label [<DateTimeField: MyModel.date>] is not in the [index]',)
документация предполагает, что вы можете запускать реальный код в функции обновления, предоставляя такие примеры, как:
Employee.update(bonus=(Employee.bonus + (Employee.salary * .1)))