【发布时间】:2010-10-13 22:51:03
【问题描述】:
我正在尝试优化一些 Python 代码。探查器告诉我 SQLAlchemy 的 _get_col() 是杀死性能的原因。代码如下所示:
lots_of_rows = get_lots_of_rows()
for row in lots_of_rows:
if row.x == row.y:
print row.z
我正要检查代码,让它更像这样......
lots_of_rows = get_lots_of_rows()
for row in lots_of_rows:
if row[0] == row[1]:
print row[2]
...但我发现一些文档似乎表明在访问像数组这样的行对象时,您实际上仍在提取字典键。换句话说,行对象如下所示:
'x': (x object)
'0': (x object)
'y': (y object)
'1': (y object)
'z': (z object)
'2': (z object)
如果是这种情况,我怀疑我会看到按数字而不是名称访问列是否会提高性能。有没有办法让 SA 以元组列表或列表列表而不是字典列表的形式返回结果?或者,任何人都可以提出任何其他优化建议吗?
【问题讨论】:
-
SQL Alchemy 的一个主要目标是添加您想要删除的内容。也许为这个查询下拉到 mysqldb/dbapi 层是有意义的?即使没有,我还是建议您仅使用 mysqldb 驱动程序重新编写一个类似的查询,看看您能真正获得多少性能。
标签: python sqlalchemy