簡體   English   中英

SQLAlchemy查詢結果為“無”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM