2012-03-02 12 views
0

SqlAlchemyで.label(...)関数がどのように機能するのか混乱しています。このクエリを実行すると、クーポン、結果のクエリに償還として、私はorder.coupon_codeを見ますが、データのリターン行で、私は二つのことを得るsqlalchemyラベル

data = session.query(Coupon, func.isnull(Order.coupon_code).label("redeemed")) \ 
    .outerjoin((Order, Order.coupon_code == Coupon.coupon_code)) \ 
    .all() 

:私はこのようなクエリの何かを持っています構造体、および '0'または '1')。 「0」または「1」を「0」または「1」の値を「償還」と命名された場合、私が望む何

[(Coupon: 
    coupon_id = 1234 
    etc 
    , 0), 
... ] 

は次のとおりです。次のようになります。このようなもの:

[(Coupon: 
    coupon_id = 1234 
    etc 
    , 
    redeemed = 0), 
... ] 

私には何のラベルがあるのか​​分かりません。誰かが私が考えているようにデータをどのように入手するかについてのヒントや方向性を持っていれば、大いに感謝しています!

おかげで、 ダグ

答えて

0

あなたがクラスに計算された値をマッピングすることができますあなたが望むものに近いように思われ、column_propertyを使用して属性。

+0

このような場合にはわかりませんが、tipのおかげで、column_propertyは非常に便利です。私はこのsession.query(Coupon、Order)のようにクエリの両方のオブジェクトからすべてを取得できますが、OrderからOrder.coupon_codeという1つのフィールドを取得する必要があります。 –

0

チェックこの

from sqlalchemy import create_engine 

engine = create_engine('mysql://test:[email protected]/test', echo=True) 
from sqlalchemy.orm import sessionmaker 

from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy import Date, Column, Integer 


Base = declarative_base() 



class User(Base): 
    __tablename__ = 'users' 

    id = Column(Integer, primary_key=True, autoincrement=True) 
    day = Column(Date, unique=True) 


if __name__ == '__main__': 

    Base.metadata.create_all(engine) 
    Session = sessionmaker(engine) 
    session = Session() 

    a = session.query(User.day.label('test')).all() 

    print "New Label :", a[0].test 
    print "DIR :", dir(a[0]) 

スクリプトを実行し、最後の文は、最初の行のdirあるとき。そしてそこにはtest属性があります。

+0

非常に便利なフィードバックと例をお寄せいただきありがとうございます。私はそれを私の文脈で試して、それが私に何を与えてくれているかどうかを見ます。 –