[英]SQLAlchemy query result is None
我有一個我不明白的問題。
我有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
時它應該停止也仍然顯示true?
所以稍后當我想使用以下命令創建字典時: row = dict(zip(row.keys(), row))
我收到錯誤消息: AttributeError: 'NoneType' object has no attribute 'keys'
我是Python的新手,將不勝感激。
這不是特定於Python的,而是任何語言中while
循環的屬性。 我假設您正在處理循環中的行,因此請考慮以下事項:
row = res.fetchone()
while row is not None:
row = res.fetchone()
print row is None
processRow(row)
在上一次迭代期間, res.fetchone()
返回None
,然后將其分配給row
,后者變為None
。 然后,在檢查while
條件之前執行processRow
語句,因此它將評估processRow(None)
。 僅在之后的迭代期間,該row is not None
條件為false,並且循環終止。 這段代碼沒有錯,這就是它的工作原理。
一個可能的解決方案是在循環內進行處理之前檢查None
:
while True:
row = res.fetchone()
if row is None:
break
processRow(row)
或者,如果查詢集很小,您甚至可以全部獲取它們並進行處理:
for row in res.fetchall():
processRow(row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.