相关疑难解决方法(0)

使用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__)
Run Code Online (Sandbox Code Playgroud)

我想确定表中的总行数,而不必等待一大堆时间查询数据库.目前,我有一些代码:

rows = session.query(Congress).all()
Run Code Online (Sandbox Code Playgroud)

然后我可以从列表中访问它们,但这需要我立即将所有内容加载到内存中.

python sql sqlalchemy

45
推荐指数
1
解决办法
5万
查看次数

为什么SQLAlchemy count()比原始查询慢得多?

我正在使用带有MySQL数据库的SQLAlchemy,我想计算表中的行数(大约300k).SQLAlchemy 计数函数的运行时间大约是在MySQL中直接写入相同查询的50倍.难道我做错了什么?

# this takes over 3 seconds to return
session.query(Segment).count()
Run Code Online (Sandbox Code Playgroud)

然而:

SELECT COUNT(*) FROM segments;
+----------+
| COUNT(*) |
+----------+
|   281992 |
+----------+
1 row in set (0.07 sec)
Run Code Online (Sandbox Code Playgroud)

速度的差异随着桌子的大小而增加(在100k行下几乎不可察觉).

更新

使用session.query(Segment.id).count()而不是session.query(Segment).count()似乎做的伎俩,让它加快速度.我仍然感到困惑,为什么初始查询速度较慢.

mysql sqlalchemy

38
推荐指数
3
解决办法
4万
查看次数

标签 统计

sqlalchemy ×2

mysql ×1

python ×1

sql ×1