2015-09-09 48 views
3

我需要構建一個複雜的查詢,我更願意使用raw postgres。但查詢返回sqlalchemy.engine.result.ResultProxy對象,當我遍歷每個這些對象是sqlalchemy.engine.result.RowProxy對象如何在SQLAlchemy中執行原始SQL查詢並在Flask中使用模型對象

search_term = "%{0}%".format(d) 
items = db.engine.execute("SELECT inventory.id,inventory.location,inventory.amount,inventory.units, plant_material.variety FROM inventory LEFT JOIN plant_material ON inventory.plant_material_id = plant_material.id WHERE plant_material.variety ILIKE %s", (search_term)) 

本標準查詢將返回我的棉花糖定義我的模型對象,<class 'app.models.Inventory'>:

Inventory.query.filter(Inventory.common_name.like(search_term)).limit(10) 

如何我可以返回models.Inventory對象並使用原始的sql?

如果你是好奇我的模型定義,看看這個gist

+1

你_could_只使用查詢API :)'Session.query(庫存) .outerjoin(PlantMaterial,PlantMaterial.id == Inventory.plant_material_id).filter(PlantMaterial.variety.ilike(search_term))。all()'否則抱歉不知道答案,想知道是否有辦法。我想你可以遍歷行並自己初始化對象。 – Lee

+0

我有這樣的情況我自己。我最終要做的是使用查詢api進行第二次查詢,並在第一個查詢返回的基礎上使用'in_' ...效率非常低。想知道是否有更好的方法,很好的問題。 – Lee

+0

@lee謝謝。剛發佈這個問題後,我結束了對API的查詢。我仍然很好奇,因爲API有自然的限制。 –

回答

0

您可以使用這樣的事情:

query = db.engine.execute("SELECT inventory.id...") 
for row in query: 
    print(row['id']) 
    ... 
相關問題