Создать строку или обновить с шагом

Я использую Flask SQLAlchemy, и у меня есть следующая схема базы данных:

Table(
  composite_primary_key,
  count INTEGER
)

Я хочу сделать оператор создания или обновления, где я могу проверить, существует ли строка с данным составным первичным ключом.

  1. Если составной первичный ключ найден, обновите счетчик строки, добавив к нему что-нибудь.
  2. Если он не найден, создайте новую строку с этим составным первичным ключом и номером, который у меня есть.

Есть ли способ сделать это в SQLAlchemy? Что-то, что не требует написания моего собственного запроса?


person Jay    schedule 21.01.2015    source источник


Ответы (1)


предполагая, что вы используете MySQL, вам нужен оператор "INSERT... ON DUPLICATE KEY UPDATE...", см. http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html К сожалению (потому что это специфично для MySQL) , на данный момент эта конструкция не поддерживается SQLAlchemy, поэтому вам придется создать собственный (буквальный) SQL-запрос:

session.execute("ВСТАВИТЬ... ПРИ ОБНОВЛЕНИИ ДВОЙНОГО КЛЮЧА...")

person MOCKBA    schedule 22.01.2015
comment
Спасибо. Как я уже упоминал в вопросе, я искал способ сделать это с помощью SQLAlchemy. Я понимаю, что это определенно можно сделать с помощью запроса MySQL, но я хотел избежать этого, если это возможно. Можно ли доказать, что это невозможно сделать с помощью SQLAlchemy (т.е. некоторые документы говорят об этом), или это просто то, чему человек учится на собственном опыте? Я понимаю, что это какой-то частный случай и вряд ли будет поддерживаться. Я оставлю этот вопрос открытым на некоторое время. - person Jay; 22.01.2015