2012-03-02 3 views
0

.label (...) 함수가 SqlAlchemy에서 어떻게 작동하는지 혼란 스럽습니다. 나는이 같은 쿼리 뭔가있어 :이 쿼리가 실행되면, 나는 결과 쿼리에 구속으로 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'). 다음과 같은 :

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

내가이 '0'또는 '1'로 선정됐다가 '0'또는 '1'의 값으로 '구속'되고 싶습니다. 다음과 같은 것 :

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

나는 어떤 라벨이 나를 위해 무엇을하는지 이해하지 못한다. 누군가 내가 생각하고있는 방식으로 데이터를 얻을 수있는 방법에 대한 힌트 나 방향이 있다면, 크게 감사하겠습니다!

감사합니다, 더그

답변

0

당신은 당신이 원하는에 가까운 것으로 보인다, column_property를 사용하여 속성 클래스에 값을 계산 매핑 할 수 있습니다.

+0

팁을 제공해 주셔서 감사합니다. 그러나이 경우에는 확실하지는 않지만 column_property는 매우 유용합니다. 이 session.query (Coupon, Order)와 같은 쿼리의 두 객체에서 모든 것을 가져올 수 있지만 Order에서 Order.coupon_code라는 필드 하나만 가져와야합니다. –

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

의견과 예제를 보내 주셔서 감사합니다. 매우 유용합니다. 나는 그것을 내 맥락에서 시험해보고 그것이 내가 무엇인지를 나에게 알려주는지 지켜 볼 것이다. –