Създайте ред или актуализирайте с нарастване

Използвам 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