Python SQLAlchemy ORM是larga数据的正确选择吗?

Python SQLAlchemy ORM是larga数据的正确选择吗?,python,sql,performance,sqlalchemy,Python,Sql,Performance,Sqlalchemy,我正在开发一个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 =

我正在开发一个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的方式是要求它为
bl
cr
创建1000000多个数据访问对象实例。这将是缓慢的,无论你用什么语言或结构来做这件事。你最好是:

  • 将数据过滤到屏幕上显示的合理数量(例如
    test\u query.limit(100).all()
    )或
  • 完全跳过DAO步骤,将数据流式传输到其端点(在本例中为标准输出)

您使用SQLAlchemy的方式要求它为
bl
cr
创建1000000多个数据访问对象实例。这将是缓慢的,无论你用什么语言或结构来做这件事。你最好是:

  • 将数据过滤到屏幕上显示的合理数量(例如
    test\u query.limit(100).all()
    )或
  • 完全跳过DAO步骤,将数据流式传输到其端点(在本例中为标准输出)

请使用大写字符作为标题的第一个字符。首先,您确定从SQLAlchemy生成的查询与放入MySQL的查询相同吗?第二,你真的需要一次得到一百万行吗?是的,我确信两个查询是相同的。我需要做的是,获取1000000个查询行结果,将它们存储在DICT列表(Python)中,然后对结果计算一些度量。也许我不需要将查询结果存储到内存中,以便以后对其进行计算?你有什么建议,我是Python新手,所以你的帮助会很好。我对SQLAlchemy不是很熟悉,但是如果你能让SQL通过聚合函数为你计算“度量”,而不是自己计算,也许值得一试。那么你就不需要检索一百万行了。。。这显然取决于您想要计算的内容的复杂性……请使用大写字符作为标题的第一个字符。首先,您确定从SQLAlchemy生成的查询与放入MySQL的查询相同吗?第二,你真的需要一次得到一百万行吗?是的,我确信两个查询是相同的。我需要做的是,获取1000000个查询行结果,将它们存储在DICT列表(Python)中,然后对结果计算一些度量。也许我不需要将查询结果存储到内存中,以便以后对其进行计算?你有什么建议,我是Python新手,所以你的帮助会很好。我对SQLAlchemy不是很熟悉,但是如果你能让SQL通过聚合函数为你计算“度量”,而不是自己计算,也许值得一试。那么你就不需要检索一百万行了。。。这显然取决于你想要计算的复杂程度……什么是DAO?我不明白你的第二句话solution@user1734229-数据访问对象。在第二种情况下,您只需在
引擎上创建一个连接,然后
cursor=conn.execute(“SQL HERE”)
然后
打印cursor.fetchall()
。DAO是什么?我不明白你的第二句话solution@user1734229-数据访问对象。在第二种情况下,您只需在
引擎上创建一个连接,然后
cursor=conn.execute(“SQL HERE”)
然后
打印cursor.fetchall()