sql >> Database >  >> RDS >> PostgreSQL

UPDATE .. LIMIT 1 met SqlAlchemy en PostgreSQL

Het subqueryrecept is de juiste manier om het te doen, nu hoeven we deze query alleen nog te bouwen met SqlAlchemy.

Laten we beginnen met de subquery:

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

En gebruik het nu met as_scalar( ) met het voorbeeld uit de update() documenten :

from sqlalchemy import update

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

Druk de vraag af om het resultaat te bekijken:

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

Geniet ervan!



  1. mysql-updatekolom en selecteer vervolgens bijgewerkte waarde

  2. ORA-21700:object bestaat niet of is gemarkeerd voor verwijdering voor Associative Array als invoerparameter aangeroepen vanuit ODP.NET

  3. SQL-injectie in dynamische SQL voorkomen

  4. Servisch Latijnse karakters opslaan in database