Мне по существу нужно сделать INSERT ... ON DUPLICATE KEY UPDATE
, однако строка уже будет существовать 99,9 ...% времени. Поэтому, что я действительно хочу сделать, это UPDATE
, поймать нечетное исключение и INSERT
.Эффективное обновление, вставка при неудаче, с sqlalchemy
В SQLAlchemy я обычно сделать следующее:
new_obj = MyModel(the_pk=id)
new_obj = MyModel.__table__.c.some_val + val
session.merge(new_obj)
Я заметил, однако, что, когда я называю session.merge
SQLAlchemy делает SELECT
, что является неэффективным в случае, я знаю, я почти всегда UPDATE
«ИНГ , Есть ли какой-то способ улучшить это, не говоря уже о написании исходного SQL (с которым я в порядке)? Мне просто интересно, есть ли какой-то трюк sqlalchemy, который мне не хватает.
Кроме того, после выполнения слияния, что произойдет, если строка с конфликтующим ПК возникнет до того, как сессия будет очищена/зафиксирована? Я предполагаю, что выбрать, чтобы определить, является ли SQLAlchemy нужно сделать позже INSERT
или UPDATE
Какую базу вы используете? MySQL, Postgresql, sqlite и т. Д.?? –
@Tony MySQL с движком InnoDB, если он имеет значение – Endophage