2012-05-30 14 views
32

Estoy usando SQLAlchemy en Python, y quiero saber cómo obtener el número total de filas en una columna. Tengo variables definidas:Obtenga el número de filas en la tabla usando 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__) 

quiero para determinar el número total de filas de la tabla sin tener que esperar un montón de tiempo de consulta de la base de datos. Actualmente, tengo un poco de código:

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

Entonces puede acceder a ellos de la lista, pero esto me obliga a cargar todo en memoria a la vez.

Respuesta

53

Esto debería funcionar

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

EDIT: Otra manera relacionado con mi primer intento

from sqlalchemy import func 
rows = session.query(func.count(Congress.id)).scalar() 
+0

Cuando escribo que en, la salida que se ve es 'SELECT count (shape_congress_districts_2012. id) como count_1 FROM shape_congress_districts_2012' ¿Eso significa que he enredado? en otro lugar dentro de mi código al construir la interfaz a la mesa? – dbmikus

+0

Lo siento, inténtelo ahora con mi respuesta actualizada;) –

+2

@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 tecla automáticamente, la consulta puede ser más rápida de esa manera. – ThiefMaster

Cuestiones relacionadas