如何在SQLAlchemy中使用UPDATE ... FROM?

时间:2012-07-31 07:34:20

标签: postgresql sqlalchemy

我想在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

2 个答案:

答案 0 :(得分: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查询一样有效,但是如果数据库内存足够大以容纳所有相关的段,那么它应该没什么区别。

答案 1 :(得分:0)

我使用sqlalchemy已经有一段时间了,所以请考虑以下作为伪代码:

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

session.commit()

我推荐sqlalchemy ORM tutorial