2012-03-02 20 views
0

我很困惑SlabAlchemy中.label(...)函數是如何工作的。我有一個查詢是這樣的:sqlalchemy標籤

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

當此查詢運行時,我看到的贖回中產生的查詢order.coupon_code,但在數據的返回行,我得到兩件事情,優惠券結構,以及「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。 – 2012-03-05 20:53:45

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

感謝您的反饋和示例,這非常有用。我會在我的上下文中嘗試一下,看看它是否給了我我所追求的。 – 2012-03-05 20:56:09