我有一张包含id
和name
的图片。我想使用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'
------------
答案 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