SQLAlchemy / Postgres でこの種のステートメントを書きたいと思います。
UPDATE slots
FROM (SELECT id FROM slots WHERE user IS NULL
ORDER BY id LIMIT 1000) AS available
SET user='joe'
WHERE id = available.id
RETURNING *;
つまり、指定された基準に一致する限られた数の行を更新したいと思います。
PG
SQLAlchemy / Postgres でこの種のステートメントを書きたいと思います。
UPDATE slots
FROM (SELECT id FROM slots WHERE user IS NULL
ORDER BY id LIMIT 1000) AS available
SET user='joe'
WHERE id = available.id
RETURNING *;
つまり、指定された基準に一致する限られた数の行を更新したいと思います。
PG
私はこのようにすることができました:
limited_slots = select([slots.c.id]).\
where(slots.c.user==None).\
order_by(slots.c.id).\
limit(1000)
stmt = slots.update().returning(slots).\
values(user='joe').\
where(slots.c.id.in_(limited_slots))
元の SQL クエリほど効率的ではないと思いますが、データベース メモリが関連するすべてのセグメントを保持するのに十分な大きさであれば、大きな違いはありません。
sqlalchemy を使用してからしばらく経っているので、以下を疑似コードと見なしてください。
for i in session.query(Slots).filter(Slots.user == None):
i.user = "Joe"
session.add(i)
session.commit()
sqlalchemy ORM チュートリアルをお勧めします。