SQLAlchemy多态加载

时间:2012-01-05 15:17:42

标签: python sqlalchemy pyramid

我在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和Pyramid 1.3a3

1 个答案:

答案 0 :(得分:2)

session.query(User)不会根据type列的值执行任何过滤 但是,它生成的SQL SELECT语句仅选择users表中的数据(除非使用with_polymorphic(...))。

但您可以明确地添加filter以获得所需的结果:

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