使用SQLAlchemy获取表中的行数

dbm*_*kus 45 python sql sqlalchemy

我在Python中使用SQLAlchemy,我想知道如何获取列中的总行数.我定义了变量:

engine = sqlalchemy.create_engine(url, ehco=False)
Session = sqlalchemy.orm.sessionmaker(bind=engine)
Session = session()
metadata = sqlalchemy.MetaData(engine)
Base = declarative_base(metadata=metadata)

# A class representing the shape_congress_districts_2012 table
class Congress(Base):
    __tablename__ = 'shape_congress_districts_2012'
    id = geoalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = geoalchemy.Column(sqlalchemy.Unicode)
    geom = geoalchemy.GeometryColumn(geoalchemy.Polygon(2))
    geom_simple = geoalchemy.GeometryColumn(geoalchemy.Polygon(2))
    area = geoalchemy.Column(sqlalchemy.Float)
    state_id = geoalchemy.Column(sqlalchemy.Integer)
    census_year = geoalchemy.Column(sqlalchemy.Date)

geoalchemy.GeometryDDL(Congress.__table__)
Run Code Online (Sandbox Code Playgroud)

我想确定表中的总行数,而不必等待一大堆时间查询数据库.目前,我有一些代码:

rows = session.query(Congress).all()
Run Code Online (Sandbox Code Playgroud)

然后我可以从列表中访问它们,但这需要我立即将所有内容加载到内存中.

Die*_*rro 85

这应该工作

rows = session.query(Congress).count()
Run Code Online (Sandbox Code Playgroud)

编辑:另一种与我的第一次尝试相关的方式

from sqlalchemy import func
rows = session.query(func.count(Congress.id)).scalar()
Run Code Online (Sandbox Code Playgroud)

  • 哪一个更适合性能?(postgres,如果有关系) (5认同)
  • @dbmikus:查询可能看起来很讨厌但完全没问题.通常的做法是使用`COUNT(primary_key_column)`而不仅仅是`COUNT(*)`,因为在数据库中,如果数据库不够智能,不能自动使用该键的索引,那么查询可能会更快. (3认同)