1

我正在开发一个 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 检索大量数据?

4

1 回答 1

1

您使用 SQLAlchemy 的方式是要求它为和创建 1,000,000 多个数据访问对象bl实例cr。无论您使用哪种语言或构造,这都会很慢。您会更好:

  • 将数据过滤到合理的数量以显示在屏幕上(例如test_query.limit(100).all()
  • 完全跳过 DAO 步骤,只将数据流式传输到其端点(在本例中为标准输出)。
于 2013-10-14T16:18:30.883 回答