2017-09-15 60 views
1

私はストアドプロシージャをpostgresqlデータベースに持っています。sqlalchemyストアドプロシージャの実行結果の解析

私は、関数をPythonフラスコのアプリケーション内でsqlalchemyで使用しようとしています。そのクエリは次のようになります。

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モデルとして解釈することができます。 これは、ORMマッパーであるAppointmentクラスを持っていると仮定しています。これは、declarative_baseを使用したか、またはマッパー関数を直接使用したためです。 は、次に、あなたのSQLストアドプロシージャを実行し、それがAppointmentオブジェクトの集合である場合、結果を解釈する

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

ような何かを行うことができます。

+0

リンクが壊れています。 –

+0

@IljaEveriläリンクが修正されました、ごめんなさい –

関連する問題