база данных выглядит следующим образом:
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 dataframe 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)))