sqlalchemy:id的前一行和下一行

时间:2014-07-06 16:27:01

标签: python sql sqlalchemy

我有一张包含idname的图片。我想使用sqlalchemy在数据库中查询其上一个图像和下一个图像。如何只在一个查询中执行此操作?

sel = select([images.c.id, images.c.name]).where(images.c.id == id)
res = engine.connect().execute(sel)

#How to obtain its previous and next row?
...

假设某些行可能已被删除,id可能不是连续的。例如,

Table: Images
------------
id | name
------------
1  | 'a.jpg'
2  | 'b.jpg'
4  | 'd.jpg'
------------

3 个答案:

答案 0 :(得分:6)

prev_image = your_session.query(Images).order_by(Images.id.desc()).filter(Images.id < id).first()

next_image = your_session.query(Images).order_by(Images.id.asc()).filter(Images.id > id).first()

答案 1 :(得分:0)

# previous
prv = select([images.c.id, images.c.name]).where(images.c.id < id).order_by(images.c.id.desc()).limit(1)
res = engine.connect().execute(prv)
for res in res:
    print(res.id, res.name)

# next
nxt = select([images.c.id, images.c.name]).where(images.c.id > id).order_by(images.c.id).limit(1)
res = engine.connect().execute(nxt)
for res in res:
    print(res.id, res.name)

答案 2 :(得分:-3)

迭代您的记录。我认为这就是你要找的东西。

for row in res:
  print row.id
  print row.name