2012-05-30 4 views
32

Я использую 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__) 

Я хочу, чтобы определить общее количество строк в таблице без необходимости ждать целую кучу времени запросов к базе данных. В настоящее время, у меня есть немного кода:

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

Тогда я могу получить доступ к их из списка, но это требует от меня, чтобы загрузить все в памяти сразу.

ответ

53

Это должно работать

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

EDIT: Другой путь, связанный с моей первой попробовать

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

Когда я печатаю, что на выходе я получаю 'SELECT COUNT (shape_congress_districts_2012. id) AS count_1 FROM shape_congress_districts_2012' Означает ли это, что я испортил где-то еще в моем коде при построении интерфейса к таблице? – dbmikus

+0

Извините, попробуйте сейчас с моим обновленным ответом;) –

+2

@dbmikus: Запрос может выглядеть неприятным, но это прекрасно. Общепринятой практикой является использование «COUNT (primary_key_column)» вместо «COUNT (*)», поскольку в базе данных, которая недостаточно умна, чтобы автоматически использовать индекс этого ключа, запрос может быть быстрее таким образом. – ThiefMaster

Смежные вопросы