【发布时间】:2013-10-22 05:49:57
【问题描述】:
我正在开发一个 Web 应用程序,有时我需要从我的数据库中选择 1.000.000 行。
我的脚本如下所示:
engine = create_engine(
"mysql://:@localhost/test",
isolation_level="READ UNCOMMITTED",echo=False
)
meta = MetaData(bind=engine)
meta.reflect(bind=engine)
cr = meta.tables['cr']
bl = meta.tables['bl']
DBSession = scoped_session(
sessionmaker(
autoflush=True,
autocommit=False,
bind=engine
)
)
test_query = session.query(bl,cr).filter(bl.c.severity_logged == '4_minor')
print test_query.all()
它不断扫描磁盘并增加内存使用量,但没有显示任何内容。
在 MySQL 命令中,4 秒后返回结果。 如何使用 SQLALchemy 检索大量数据?
【问题讨论】:
-
标题的第一个字符请使用大写字符
-
首先,您确定您从 SQLAlchemy 生成的查询与您放入 MySQL 的查询相同吗?其次,你真的需要一次获得 100 万行吗?
-
是的,我确信这两个查询是相同的。那么我需要做的是,获取 1 000 000 个查询行结果,将它们存储在字典列表(Python)中,然后计算结果的一些指标。也许我不需要将查询结果存储到内存中以便以后对它们进行计算?你有什么建议,我是 Python 的新手,所以你的帮助会很棒。
-
我对 SQLAlchemy 不是很熟悉,但也许值得检查一下您是否可以让 SQL 通过聚合函数为您计算“指标”,而不是自己计算。那么你就不需要检索一百万行......这显然取决于你想要计算的复杂性......
标签: python sql performance sqlalchemy