[英]SQLAlchemy ORM: Polymorphic Single Table Inheritance, with fallback to parent class if “polymorphic_identity” is not found
[英]SQLAlchemy Single Table Inheritance with polymorphic_identity lacks WHERE
情況:我有一個帶有幾列的數據表“ my_table”(我們稱它們為“ a”,“ b”和“ c”)。
使用SQLAlchemy,我在模型中創建了3個類:
class MyTableBase():
a = Column(int)
class MyClassOne(MyTableBase):
b = Column(int)
class MyObjectTwo(MyTableBase):
c = Column(int)
我想覆蓋默認的query(MyClassOne).all()只返回a = 10的記錄,而query(MyClassTwo).all()只返回a = 20的記錄。
這應該提供一種非常優雅的方式來在一個表中存儲許多不同(但非常相似)的對象,同時在類/對象級別上單獨使用它們。
有什么建議么? 也許這是我缺乏搜索技能,但根本找不到:/
更新 :
我的代碼現在:
class MyTableBase:
__tablename__ = u'my_table_base'
a = Column(VARCHAR(length=20)) #to distinct different types
__mapper_args__ = {"polymorphic_on": a}
class MyClassOne(MyTableBase):
__mapper_args__ = {"polymorphic_identity": "aaaa"}
b = Column(int)
class MyClassTwo(MyTableBase):
__mapper_args__ = {"polymorphic_identity": "bbbb"}
c = Column(int)
我的數據庫表有兩個記錄-一個記錄在“ a”列中,值為“ aaaa”,另一個記錄為“ bbbb”。 查詢MyClassOne和MyClassTwo返回兩行。 有任何想法嗎?
更新 :要選擇我使用的數據:
cls_query = Session.query(MyClassOne)
print 'cls_query: ',cls_query
cls_query.all()
打印結果為:
cls_query: SELECT my_table_base.id AS my_table_base_id,
my_table_base.a AS my_table_base_a,
my_table_base.b AS my_table_base_b
FROM my_table_base
請注意,它僅采用所需類MyClassOne中的列(SELECT語句中不存在列c),但仍然缺少WHERE部分。
如此處所示: Flask-SQLAlchemy單表繼承
正確的答案是__tablename__ =所有子類中都沒有 。
class MyTableBase:
__tablename__ = u'my_table_base'
a = Column(VARCHAR(length=20)) #to distinct different types
__mapper_args__ = {"polymorphic_on": a}
class MyClassOne(MyTableBase):
__tablename__ = None
__mapper_args__ = {"polymorphic_identity": "aaaa"}
b = Column(int)
class MyClassTwo(MyTableBase):
__tablename__ = None
__mapper_args__ = {"polymorphic_identity": "bbbb"}
c = Column(int)
此信息在相關的SQLAlchemy文檔中不存在:(
現在工作正常!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.