【问题标题】:SQLAlchemy Polymorphic LoadingSQLAlchemy 多态加载
【发布时间】:2013-02-11 00:21:03
【问题描述】:

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

【问题讨论】:

  • 请注意,您的示例代码缺少polymorphic_identity User 的配置。

标签: python sqlalchemy pyramid


【解决方案1】:

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

但您可以显式添加filter 以获得所需的结果:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多