2017-09-15 60 views
1

我在postgresql數據庫中有一個存儲過程。sqlalchemy存儲過程執行的解析結果

我正在嘗試使用sqlalchemy的python燒瓶應用程序中的函數。該查詢如下所示:

from sqlalchemy import func 

appts = db.session.execute(func.getopenappointments(current_user.id)) 

for appt in appts: 
    # work with each appt 

該查詢的結果是sqlalchemy.engine.result.ResultProxy類型的對象。該對象的每一次迭代看起來是這樣的:

('(2,"2017-09-15 10:00:00",6,cleaning,available,5)',) 

問題是我用來指列的東西,如:

for appt in appts: 
    print(appt.id) 

但這種失敗,因爲ID不存在。我已經意識到輸出是一個字符串,我必須用python split()來分析,以獲得我需要的值。我怎樣才能保存這個存儲過程,但能夠通過列引用輸出,或者至少可以作爲元組而不是常規字符串?

+0

爲什麼你的記錄是這樣格式化的? –

+0

我認爲這是關鍵問題。該記錄沒有格式化,我期望它與典型的sqlalchemy結果一致。但這是我從執行存儲過程中得到的結果。 – Casey

+0

你知道結果中每個「字段」的數據類型嗎?什麼類型是「清潔」和「可用」?字符串? –

回答

1

看看this question。有一個名爲from_statement的構造,可用於將SQL語句的結果解釋爲SQLAlchemy ORM模型。 所以我假設你有一個Appointment類,它是一個ORM映射器,或者是因爲你使用了declarative_base,或者是因爲你直接使用了mapper函數。 然後,你可以這樣做

appts = db.session.query(Appointment).from_statement(func.getopenappointments(current_user.id)) 

這將運行SQL存儲過程和解釋結果,如果它是一組Appointment對象。

+0

這個鏈接被打破了,在另一個很好的答案。 –

+0

@IljaEverilä鏈接固定,對不起'回合 –