2012-05-30 69 views
32

Tôi đang sử dụng SQLAlchemy bằng Python và tôi muốn biết cách lấy tổng số hàng trong một cột. Tôi có các biến được xác định:Lấy số hàng trong bảng bằng cách sử dụng 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__) 

Tôi muốn xác định tổng số hàng trong bảng mà không phải đợi toàn bộ thời gian truy vấn cơ sở dữ liệu. Hiện tại, tôi có một chút mã:

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

Sau đó, tôi có thể truy cập chúng từ danh sách, nhưng điều này yêu cầu tôi tải mọi thứ vào bộ nhớ cùng một lúc.

Trả lời

53

này nên làm việc

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

EDIT: Một cách khác liên quan đến đầu tiên của tôi thử

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

Khi tôi gõ trong, đầu ra tôi nhận được là 'select count (shape_congress_districts_2012. id) AS count_1 FROM shape_congress_districts_2012' Điều đó có nghĩa là tôi đã sai lầm lên một nơi khác trong mã của tôi khi xây dựng giao diện cho bảng? – dbmikus

+0

Xin lỗi, hãy thử ngay với câu trả lời cập nhật của tôi;) –

+2

@dbmikus: Truy vấn có thể trông khó chịu nhưng hoàn toàn ổn. Thông thường, sử dụng 'COUNT (primary_key_column)' thay vì chỉ 'COUNT (*)' vì trong cơ sở dữ liệu không đủ thông minh để sử dụng chỉ mục của khóa đó một cách tự động truy vấn có thể nhanh hơn theo cách đó. – ThiefMaster

Các vấn đề liên quan