SQLAlchemy';带_多态鉴别器的s
我正在尝试从一个连接的固有表中进行多态加载(我使用的是Alchemy) 我有一个设备对象和一个线路对象。当我试图提出这样一个问题时: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>] 我就是不知道发生了什么事。一切似乎都和博士的例子一模一样。 谢谢。不按类型筛选对象,只定义在初始查
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'