SQLAlchemy';带_多态鉴别器的s

SQLAlchemy';带_多态鉴别器的s,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,我正在尝试从一个连接的固有表中进行多态加载(我使用的是Alchemy) 我有一个设备对象和一个线路对象。当我试图提出这样一个问题时: Sip.query.with_polymorphic(Device).all() 它返回所有对象 [<myapp.models.Device at 0x45cfc50>, <myapp.models.Line at 0x45cfa90>] 我就是不知道发生了什么事。一切似乎都和博士的例子一模一样。 谢谢。不按类型筛选对象,只定义在初始查

我正在尝试从一个连接的固有表中进行多态加载(我使用的是Alchemy)

我有一个设备对象和一个线路对象。当我试图提出这样一个问题时:

Sip.query.with_polymorphic(Device).all()
它返回所有对象

[<myapp.models.Device at 0x45cfc50>, <myapp.models.Line at 0x45cfa90>]
我就是不知道发生了什么事。一切似乎都和博士的例子一模一样。 谢谢。

不按类型筛选对象,只定义在初始查询期间从中提取其他表的列。因此,如果您在查询中不使用
with_polymorphic
,并且希望为存储在
lines
表中的
Line
属性获取一个值,SA将发出另一个
SQL
语句从数据库中获取该属性

在引擎中启用
echo=True
,您将看到根据
和_polymopic
用法生成的不同SQL语句:

  • 无用途:在查询过程中仅加载
    sips
    表中的属性
  • 带多态(设备)
    :也将加载
    设备
    表的属性(使用
    左连接
    s)
  • with_polymorphic(“*”)
    :将加载同一查询中所有子类的属性

有关此主题的更多信息,请阅读。

非常感谢。我读过这些文档,但懒得去研究SQL语句,这是我的错。因此,我现在使用
Sip.query.with_多态(设备).filter_by(identity='dev').all()
,太好了!您还可以使用
Device.query.all()
仅获取
设备
?当然可以,但我想一次获取
Device
Sip
中的所有列,据我所知,
with_polymopic()
可以。
[<myapp.models.Device at 0x45cfc50>, <myapp.models.Line at 0x45cfa90>]
>> Sip.query.with_polymorphic(Device).all()[0].identity
>> u'dev'
>> Sip.query.with_polymorphic(Device).all()[1].identity
>> u'line'