2012-01-05 43 views
2

我有這個模型中的SQLAlchemy:SQLAlchemy的多態加載

class User(Base): 
    __tablename = 'users' 
    id = Column(Integer, primary_key=True, autoincrement=True) 
    type = Column(Text, nullable=False) 
    user_name = Column(Text, unique=True, nullable=False) 
    __mapper_args__ = {'polymorphic_on': type} 

class Client(User): 
    __tablename__ = 'clients' 
    __mapper_args__ = {'polymorphic_identity': 'client'} 
    id = Column(Integer, ForeignKey('users.id'), primary_key=True) 
    client_notes = Column(Text) 

這是一個連接表繼承。問題是,當我詢問用戶:

self.session.query(User).all() 

我得到的是來自客戶端的記錄,而我要的是對用戶無客戶端的所有記錄。我該如何解決這個問題?

編輯:我使用SQLAlchemy的0.7.4和金字塔1.3a3

+0

請注意,示例代碼中缺少''爲User' polymorphic_identity' configuraion。 – van 2012-01-05 17:03:06

回答

2

session.query(User)不執行基於type列的值任何過濾。
但是,它生成的SQL SELECT語句僅從users表中選擇數據(除非使用with_polymorphic(...))。

但是你可以添加filter明確地才達到期望的結果:

session.query(User).filter(User.type=='user').all()