Кто-нибудь знает, что эквивалентно предложению SQL «ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ» в SQLAlchemy и его языке выражения SQL?SQLAlchemy - INSERT OR REPLACE эквивалент
Большое спасибо - honzas
Кто-нибудь знает, что эквивалентно предложению SQL «ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ» в SQLAlchemy и его языке выражения SQL?SQLAlchemy - INSERT OR REPLACE эквивалент
Большое спасибо - honzas
Я не думаю, что (поправьте меня, если я ошибаюсь) установить или заменить в любой из стандартов SQL; это специфичная для SQLite вещь. Существует MERGE, но это не поддерживается всеми диалектами. Поэтому он недоступен в общем диалекте SQLAlchemy.
Самое чистое решение - использовать сеанс, как предложил М. Утку. Вы также можете использовать SAVEPOINT для сохранения, попробуйте: вставить, кроме IntegrityError: затем откат и выполнить обновление. Третье решение - написать свой INSERT с предложением OUTER JOIN и WHERE, которое фильтрует строки с нулями.
Session.save_or_update(model)
Что относительно Session.merge
?
Session.merge(instance, load=True, **kw)
Скопируйте состояние экземпляра в постоянный экземпляр с тем же идентификатором.
Если в сеансе нет постоянного экземпляра, он будет загружен. Верните постоянный экземпляр. Если данный экземпляр некорректен, сохраните копию и верните ее как новый постоянный экземпляр. Данный экземпляр не ассоциируется с сеансом. Эта операция каскадирует к связанным экземплярам, если ассоциация сопоставляется с cascade = "merge".
из http://www.sqlalchemy.org/docs/reference/orm/sessions.html
Вы можете использовать OR REPLACE
как так называемый prefix
в вашем SQLAlchemy Insert
- документацию для того, как поместить OR REPLACE
между INSERT
и INTO
в вашем SQL заявление является here
Это похоже на [этот ответ] (http://stackoverflow.com/questions/2218304/sqlalchemy-insert-ignore/2224729#2224729). –
Это не мой дело. Я не использую сеанс, я напрямую использую Connection, поэтому это должно быть сделано с использованием языка выражения SQL и conn.execute (...) – honzas
В любом случае, это 0.4 SQLA, для 0.5 вам нужно использовать Session.add (модель) – Jiri