T
class Result(Base):а вот так работает в декларативном стиле
__tablename__ = "results"
id = Column(Integer, primary_key=True)
inchi = Column(String)
task_key = Column(String)
error = Column(String)
_stats_subquery = select(
Result.task_key,
func.count(Result.inchi).label("inchi_count"),
func.count(Result.error).label("error_count"),
).group_by(Result.task_key).subquery()
class TaskStat(Base):
__table__ = _stats_subquery
__mapper_args__ = {
'primary_key': [_stats_subquery.c.task_key]
}
class Task(Base):
__tablename__ = "tasks"
key = Column(String, primary_key=True, autoincrement=False)
created_at = Column(DateTime, server_default=func.now())
stats = relationship(
TaskStat,
uselist=False,
viewonly=True,
primaryjoin="foreign(TaskStat.task_key) == Task.key"
)