我有下表:
id | user_id | name | value
----------------------------
1 | 1 | so | 1
2 | 1 | os | 2
3 | 2 | so | 3
4 | 2 | os | 4
5 | 2 | os | 7
如何使用 name ==“os”和 max ( value >选择不同的用户行)使用sqlalchemy的值列表?
附加, 可能无用 ,信息:我正在使用sqlalchemy和金字塔
这与我的尝试类似:
ResVar = DBSession.query(tableModel.id, tableModel.user_id, tableModel.name, tableModel.value, func.max(tableModel.value)).filter(tableModel.value.in_(list(checkList))).filter(tableModel.name == "so").group_by(tableModel.user_id).all()
这与我的模特类似:
class tableModel(Base):
__tablename__ = 'table'
id = Column(Integer,primary_key=True)
name = Column(String(100))
value = Column(String(200))
user_id = Column(Integer,ForeignKey('user.id'))
user = relationship("user",foreign_keys=[user_id])
def __init__(self, user_id,name,value):
self.user_id = user_id
self.name = name
self.value = value
预期结果:
1 | 1 | so | 1
3 | 2 | so | 3
答案 0 :(得分:0)
由于SQLite不支持DISTINCT ON
,我们必须使用GROUP BY user_id
:
T = tableModel
q = session.query(T.id, T.user_id, T.name, func.max(T.value)) \
.filter(T.name=='so') \
.filter(T.value.in_([1, 2, 3, 4])) \
.group_by(T.user_id)
导致以下行:
(1, 1, u'so', u'1')
(3, 2, u'so', u'3')