SQLAlchemy 多态加载

3 投票
1 回答
1412 浏览
提问于 2025-04-17 09:36

我在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)

这是一个联合表继承的结构。问题是当我查询用户(User)时:

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

我得到的全是客户(Client)的记录,而我想要的是所有用户的记录,不包括客户。这个问题我该怎么解决呢?

补充说明:我使用的是SQLAlchemy 0.7.4和Pyramid 1.3a3

1 个回答

2

session.query(User) 这个命令不会根据 type 列的值进行任何筛选。
不过,它生成的 SQL SELECT 语句只会从 users 表中选择数据(除非使用 with_polymorphic(...))。

但是,你可以明确地添加 filter 来达到你想要的结果:

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

撰写回答