2017-09-15 38 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ä链接固定,对不起'回合 –