Estoy usando SQLAlchemy en Python y quiero saber cómo obtener el número total de filas en una columna. Tengo variables definidas:

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__)

Quiero determinar el número total de filas en la tabla sin tener que esperar mucho tiempo consultando la base de datos. Actualmente, tengo un poco de código:

rows = session.query(Congress).all()

Entonces puedo acceder a ellos desde la lista, pero esto requiere que cargue todo en la memoria a la vez.

70
dbmikus 30 may. 2012 a las 23:06

1 respuesta

La mejor respuesta

Esto debería funcionar

rows = session.query(Congress).count()

EDITAR: otra forma relacionada con mi primer intento

from sqlalchemy import func
rows = session.query(func.count(Congress.id)).scalar()
141
Diego Navarro 30 may. 2012 a las 23:35
Cuando escribo eso, el resultado que obtengo es SELECT count(shape_congress_districts_2012.id) AS count_1 FROM shape_congress_districts_2012 ¿Eso significa que me he equivocado en algún otro lugar dentro de mi código al construir la interfaz de la tabla?
 – 
dbmikus
30 may. 2012 a las 23:24
4
@dbmikus: la consulta puede parecer desagradable, pero está perfectamente bien. Es una práctica común usar COUNT(primary_key_column) en lugar de solo COUNT(*) ya que en una base de datos que no es lo suficientemente inteligente como para usar el índice de esa clave automáticamente, la consulta puede ser más rápida de esa manera.
 – 
ThiefMaster
30 may. 2012 a las 23:37
17
¿Cuál es mejor para el rendimiento? (postgres si importa)
 – 
Marosinho
14 feb. 2018 a las 12:44