簡體   English   中英

具有polymorphic_identity的SQLAlchemy單表繼承缺少WHERE

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM