2012-07-31 83 views
1

我想寫這種說法在SQLAlchemy的/ Postgres的:如何在SQLAlchemy中使用UPDATE ... FROM?

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

回答

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查詢,但如果數據庫內存大到足以容納所有相關細分它不該」沒有什麼不同。

0

這已經有一段時間,因爲我用的SQLAlchemy所以考慮以下的僞代碼:

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

session.commit() 

我建議sqlalchemy ORM tutorial

+1

向下投票,因爲這不回答問題。 – 2016-05-10 07:21:14

相關問題