python - SQLAlchemy 多态加载

标签 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

最佳答案

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

但是您可以显式地添加过滤器来获得想要的结果:

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

关于python - SQLAlchemy 多态加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8744849/

相关文章:

python - wc -l 和 python 行数不同

python - 在 Python 中实现 "Wave Collapse Function"算法的问题

python - sqlalchemy、postgresql 和关系卡在 "idle in transaction"

python - 值错误: I/O operation on closed file in Pyramid

python - 在 Pyramid + sqlalchemy 应用程序的(基于 Selenium 的)功能测试中访问测试数据库

python - 存储上传的图像?

python - 如何在 tensorflow 中顺序和随机读取 tf.data.Iterator ?

python - SQLAlchemy:可以以声明方式将列声明为主键吗?

flask - 如何在 Flask-SqlAlchemy 中使用子查询?

python - 查找数据框中行的最大值并在 pandas 中返回其列名称