PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

UPDATE .. LIMIT 1 com SqlAlchemy e PostgreSQL


A receita de subconsulta é o jeito certo de fazer isso, agora só precisamos construir esta consulta com SqlAlchemy.

Vamos começar com a subconsulta:
sq = ssn.query(Log.id)  \
    .order_by(Log.id.desc())  \
    .limit(1)  \
    .with_for_update()

E agora use-o com as_scalar( ) com o exemplo do atualização() documentos :
from sqlalchemy import update

q = update(Log)  \
    .values({'analyzed': True})  \
    .where(Log.id == sq.as_scalar())

Imprima a consulta para ver o resultado:
UPDATE logs 
SET analyzed=:analyzed 
WHERE logs.id = (
    SELECT logs.id 
    FROM logs ORDER BY logs.id DESC 
    LIMIT :param_1 
    FOR UPDATE
)

Apreciar!