С SqlAlchemy можно ли построить запрос, который будет обновлять только первую соответствующую строку?UPDATE .. LIMIT 1 с SqlAlchemy и PostgreSQL
В моем случае, мне нужно обновить самую последнюю запись в журнале:
class Log(Base):
__tablename__ = 'logs'
id = Column(Integer, primary_key=True)
#...
analyzed = Column(Boolean)
session.query(Log) \
.order_by(Log.id.desc()) \
.limit(1) \
.update({ 'analyzed': True })
Что приводит к:
InvalidRequestError: Can't call Query.update() when limit() has been called
Это имеет смысл, так как UPDATE ... LIMIT 1
является MySQL только функция (с полученное решение here)
Но как бы я сделал то же самое с PostgreSQL? Возможно, используя the subquery approach?
Лучшее решение зависит от того, должна ли каждая параллельная транзакция обновлять *** ту же самую *** первую строку в соответствии с 'ORDER BY', или *** следующую *** строку, еще не заблокированную или одну, случайная/произвольная строка, соответствующая некоторым критериям. –