解析sqlalchemy存储过程执行的结果

时间:2017-09-15 02:28:16

标签: python sqlalchemy

我在postgresql数据库中有一个存储过程。

我正在尝试使用sqlalchemy在python烧瓶应用程序中使用该功能。该查询如下所示:

apply from: 'checkstyle.gradle'

此查询的结果是sqlalchemy.engine.result.ResultProxy类型的对象。该对象的每次迭代都如下所示:

from sqlalchemy import func

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

for appt in appts:
    # work with each appt

问题是我习惯用以下内容来引用列:

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

但由于id不存在而失败。我已经意识到输出几乎是一个字符串,我必须解析python split()只是为了得到我需要的值。我如何保持这个存储过程但能够按列引用输出,或者至少作为元组而不是常规字符串?

1 个答案:

答案 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))

如果它是一组Appointment个对象,它将运行您的SQL存储过程并解释结果。