2012-05-30 18 views
32

Używam SQLAlchemy w Pythonie, i chcę wiedzieć, jak uzyskać całkowitą liczbę wierszy w kolumnie. Mam zdefiniowane zmienne:Uzyskaj liczbę wierszy w tabeli przy użyciu 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__) 

Chcę określić całkowitą liczbę wierszy w tabeli bez konieczności oczekiwania na całą masę czasu kwerendy bazy danych. Obecnie mam trochę kodu:

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

Następnie mogę uzyskać do nich dostęp z listy, ale wymaga to natychmiastowego załadowania wszystkiego do pamięci.

Odpowiedz

53

To powinno działać

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

EDIT: Innym sposobem związanej mój pierwszy spróbować

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

Po wpisaniu że wyjście mogę to 'SELECT count (shape_congress_districts_2012. id) AS count_1 FROM shape_congress_districts_2012' Czy to oznacza, że ​​pomieszałem gdzieś indziej w moim kodzie podczas konstruowania interfejsu do stołu? – dbmikus

+0

Przepraszamy, spróbuj teraz z moją zaktualizowaną odpowiedzią;) –

+2

@dbmikus: zapytanie może wyglądać nieprzyjemnie, ale jest idealnie w porządku. Powszechną praktyką jest używanie 'COUNT (primary_key_column)' zamiast po prostu 'COUNT (*)' ponieważ w bazie danych, która nie jest wystarczająco inteligentna, aby użyć indeksu tego klucza automatycznie, zapytanie może być szybsze w ten sposób. – ThiefMaster

Powiązane problemy