2

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

4

2 に答える 2

3

私はこのようにすることができました:

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 クエリほど効率的ではないと思いますが、データベース メモリが関連するすべてのセグメントを保持するのに十分な大きさであれば、大きな違いはありません。

于 2013-01-04T08:54:56.887 に答える
-2

sqlalchemy を使用してからしばらく経っているので、以下を疑似コードと見なしてください。

for i in session.query(Slots).filter(Slots.user == None):
    i.user = "Joe"
    session.add(i)

session.commit()

sqlalchemy ORM チュートリアルをお勧めします。

于 2012-08-04T21:05:42.993 に答える