2012-05-30 27 views
32

我使用Python中的SQLAlchemy表中的行數,我想知道如何獲得在一列列的總數。我定義了變量:獲取使用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() 

編輯:與我的第一另一種方法嘗試

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

當我的那種類型,輸出我得到的是 'SELECT COUNT(shape_congress_districts_2012。號),COUNT_1 FROM shape_congress_districts_2012' 這是否意味着我搞砸在構建表的接口時,在代碼中的其他位置? – dbmikus

+0

對不起,現在試試我的更新答案;) –

+2

@dbmikus:查詢可能看起來很討厭,但是非常好。通常的做法是使用'COUNT(primary_key_column)'而不是'COUNT(*)',因爲在數據庫中智能不足以自動使用該鍵的索引時,查詢可能會更快。 – ThiefMaster