SQLAlchemy查询结果为None

时间:2013-10-18 11:26:34

标签: python sqlalchemy

我有这个问题,我不明白。

我有SELECT()查询返回数千行。对于内存问题,我让它一次返回一个结果行。然后我将结果转换为字典。

select_query = select([table1,table2]).where(all_filters)
res = conn.execute(select_query)
row = res.fetchone()
while row is not None:
    row = res.fetchone()
    print row is None

结果是:

False
False
False
False
True

为什么它仍然显示为真,即使它应该在row is None ??

时停止

所以稍后当我想使用:row = dict(zip(row.keys(), row))创建一个字典时 我收到错误:AttributeError: 'NoneType' object has no attribute 'keys'

我是Python的新手,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

这不是特定于Python的,而是任何语言中while循环的属性。我假设你正在处理循环内的行,所以请考虑这个:

row = res.fetchone()
while row is not None:
    row = res.fetchone()
    print row is None
    processRow(row)

在上一次迭代中,res.fetchone()返回None,然后将其分配给row,后者变为None。然后,在processRow条件被检查之前执行while语句,因此它评估processRow(None)。只有之后,在接下来的迭代中,row is not None条件为假,循环终止。这段代码没有任何问题,它正是它的工作方式。

一种可能的解决方案是在循环内部处理之前检查None

while True:
    row = res.fetchone()
    if row is None:
        break
    processRow(row)

或者,如果查询集很小,您甚至可以全部获取它们并使用:

进行处理
for row in res.fetchall():
    processRow(row)