sqlalchemy - 从 AbstractConcreteBase 继承时对混合属性进行多态过滤
问题描述
我已经成功地通过AbstractConcreteBase父级多态加载项目。是否也可以过滤后代的hybrid_property定义?我还想过滤每个子类的不同列。
查询
# Fetching all ItemA and ItemB works well with...
ItemBase.query.all()
# Given the models below is it possible to filter on the children's
# item_id hybrid_property to fetch all ItemB with item_b_id of 1
# Result is []
ItemBase.query.filter(ItemBase.item_id == 'B1')
# This also doesn't work
# Result is everything unfiltered
ItemBase.query.filter(ItemB.item_id == 'B1')
楷模:
from sqlalchemy.sql.expression import cast
from sqlalchemy.ext.declarative import AbstractConcreteBase
from sqlalchemy.ext.hybrid import hybrid_property
class ItemBase(AbstractConcreteBase, Base):
__tablename__ = None
@hybrid_property
def item_id(self): pass
@activity_id.expression
def item_id(cls):
pass
class ItemA(ItemBase):
__tablename__ = 'item_a'
__mapper_args__ = {
'polymorphic_identity': 'item_a',
'concrete':True
}
item_a_id = db.Column(db.Integer, primary_key=True)
@hybrid_property
def item_id(self):
return 'A' + str(self.item_a_id)
@activity_id.expression
def item_id(cls):
return 'A' + str(self.item_a_id)
class ItemB(ItemBase):
__tablename__ = 'item_b'
__mapper_args__ = {
'polymorphic_identity': 'item_b',
'concrete':True
}
item_b_id = db.Column(db.Integer, primary_key=True)
@hybrid_property
def item_id(self):
return 'B' + str(self.item_b_id)
@activity_id.expression
def item_id(cls):
return 'B' + str(self.item_b_id)
我现在坚持使用表结构。任何帮助是极大的赞赏。
解决方案
推荐阅读
- database - 设计星形/雪花模式数据库
- image - Xamarin.Forms 在共享项目中设置图像源
- python - 脚本不会停止
- python - 从 Matlab 到 Python 的元胞数组字符串
- javascript - ReactJs:不会为最后调度 redux 操作的组件调用 componentWillReceiveProps
- php - 对使用浏览器的人隐藏文件,但在站点内对 AJAX 可见
- python - 如何在两个子图之间有一个共同的 y 标签?
- javascript - 如何通过反应读取本地服务器 JSON 文件?
- python - 如何将python代码导入顺序列为树?
- android-studio - Google Fit API 登录卡在加载时