Это немного код, который я пишу для плагина для небольшого программного обеспечения (Anki).SqlAlchemy OperationalError using Case
for i in date:
self.deck.s.execute(
"""CASE WHEN EXISTS(SELECT * FROM :table WHERE day=date(:i)) THEN
UPDATE :table SET WHERE day=date(:i)
ELSE
INSERT INTO :table (day, matureRise) VALUES (date(:i),1)
END""", {'table':STATSTABLE,'i':i})
Проблема в том, что он продолжает бросать OperationalError. В частности, я получаю:
sqlalchemy.engine.default", line 299, in do_execute
OperationalError: (OperationalError) near "CASE": syntax error u'CASE WHEN EXISTS(SELECT * FROM ? WHERE day=date(?)) THEN\nUPDATE ? SET WHERE day=date(?)\nELSE\nINSERT INTO ? (day, matureRise) VALUES (date(?),1) END' ('stats_2', (u'2011-05-03',), 'stats_2', (u'2011-05-03',), 'stats_2', (u'2011-05-03',))
Я пытался несколько вещей, но я не мог понять, что случилось. Я не очень хорошо знаком с sqlalchemy, поэтому мне интересно, может быть, есть какой-то нюанс в поставке необработанного SQL, который мне не хватает.
Uhh .. когда-либо слышал о 'INSERT ... ON DUPLICATE KEY UPDATE'? – plaes
Ничего не исправить. Все еще получаю ошибку: sqlalchemy.exc.OperationalError: (OperationalError) рядом с «ON»: синтаксическая ошибка u «INSERT INTO stats_2 (day, ageRise) VALUES (дата ('2011-05-03'), 1) ON DUPLICATE KEY UPDATE ageRise = зрелыйRise + 1 – Jeremy
Это поможет, если вы сообщите, какую базу данных вы используете. Это решение, которое я предложил, зависит от MySQL и не поддерживается SQLite. – plaes