Fel*_*lix 8 sql postgresql sqlalchemy
我有一个带有计数的原始内连接查询,直接在Postgres SQL上编写:
SELECT "films"."id" AS "megaId",
COUNT("filmComments"."id") AS "numOfComments"
FROM "films"
INNER JOIN "filmComments"
ON ("films"."id" = "filmComments"."filmId")
GROUP BY "films"."id";
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用普通的SqlAlchemy,而不是connection.execute(sqlCode)?
PS我的SqlAlchemy表类:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import Column, Integer, String, Date, Float
class Film(Base):
__tablename__ = "films"
id = Column(Integer, primary_key = True)
name = Column(String)
rating = Column(Float)
marksCount = Column(Integer)
commentsCount = Column(Integer, index=True)
class FilmComment(Base):
__tablename__ = "filmComments"
id = Column(Integer, primary_key = True)
filmId = Column(Integer, index=True)
rating = Column(Integer, index=True)
text = Column(String)
votesUp = Column(Integer)
votesDown = Column(Integer)
userId = Column(Integer)
date = Column(Date)
Run Code Online (Sandbox Code Playgroud)
将其映射到SQLAlchemy应该非常简单.出于显而易见的原因,我不会考虑别名.
from sqlalchemy import func
megaId, numOfComments = (session.query(Film.id, func.count(FilmComment.id))
.join(FilmComment, Film.id == FilmComment.filmId)
.group_by(Film.id).first())
Run Code Online (Sandbox Code Playgroud)
这应该工作.on如果FilmComment.filmId声明为外键,则不需要显式子句.
| 归档时间: |
|
| 查看次数: |
18976 次 |
| 最近记录: |