python - SQLAlchemy 最多获得 N 个结果,其中每个类别少于 M
问题描述
我有三个表A
, B
,C
其中A
s 有B
s 和B
s 有C
s,就像 A 学校有课程(数学、文学)和课程有学生一样。同名B
的 s 被认为是相同的,无论A
它们属于哪个,相同的C
s也是如此B
。
我想查询A
s 的一个子集(简单filter
),这样我最多得到N
B
每个不超过M
C
s 的 s。
我已经阅读了很多方法来获得N
每个类别的顶部,但甚至无法使用我的SQLite
...查询(见下文)永远不会结束。
subq = sess.query(
C,
func.row_number().over(
partition_by=B.name,
order_by=C.grade).label('n')).\
filter(~A.name.startswith('something'), B.size==2, C.grade < threshold).\
subquery()
q_alias = aliased(Val, subq)
q = sess.query(q_alias).filter(subq.c.n <= M)
这甚至是可行的还是我应该只查询所有并在 Python 中循环直到我到达N
?
编辑:
class A(Base):
__tablename__ = 'a_objs'
id = Column(Integer, primary_key=True)
name = Column(String(128))
b_list = relationship('B', cascade='all, delete-orphan', lazy='dynamic', back_populates='a')
class B(Base):
__tablename__ = 'b_objs'
id = Column(Integer, primary_key=True)
name = Column(String(128))
a_id = Column(Integer, ForeignKey('a_objs.id'))
a = relationship('A', back_populates='b_list')
c_list = relationship('C', cascade='all, delete-orphan', order_by='asc(C.grade)', back_populates='b')
class C(Base):
__tablename__ = 'c_objs'
id = Column(Integer, primary_key=True)
grade = Column(Float)
name = Column(String(128))
b_id = Column(Integer, ForeignKey('b_objs.id'))
b = relationship('B', back_populates='c_list')
解决方案
推荐阅读
- c - 在这个以整数作为参数的函数(在 C 中)中:为什么每次调用函数时 sum = 0 不?
- python - 尝试使用 buildozer 构建 apk 时出错
- swift - 使 UIFont 黑色/沉重和斜体
- json - 如何向 json 格式添加新值
- django - TypeError: SET_NULL() 缺少 4 个必需的位置参数:“collector”、“field”、“sub_objs”和“using”
- python - 如何隐藏熊猫数据框中的特定行
- c - 阻塞主线程,并等待线程池中的其他 5 个线程
- python - ZeroDivisionError:电影评级数据中的零除法(电影推荐系统)(knn)
- javascript - react native 从firebase实时数据库中获取数据时如何通过函数返回数据
- java - java字节码是如何执行的,因为所有操作系统都没有预装包含java虚拟机的JRE(JAVA RUNTIME ENVIRONMENT)