PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

MISE À JOUR .. LIMITE 1 avec SqlAlchemy et PostgreSQL

La recette de sous-requête est la bonne façon de le faire, maintenant nous n'avons plus qu'à construire cette requête avec SqlAlchemy.

Commençons par la sous-requête :

sq = ssn.query(Log.id)  \
    .order_by(Log.id.desc())  \
    .limit(1)  \
    .with_for_update()

Et maintenant, utilisez-le avec as_scalar( ) avec l'exemple du documentation update() :

from sqlalchemy import update

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

Imprimez la requête pour voir le résultat :

UPDATE logs 
SET analyzed=:analyzed 
WHERE logs.id = (
    SELECT logs.id 
    FROM logs ORDER BY logs.id DESC 
    LIMIT :param_1 
    FOR UPDATE
)

Amusez-vous !