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 回答