情况: 我有一个包含多个列的数据表'my_table'(我们称之为'a','b'和'c')。
使用SQLAlchemy我在我的模型中创建了3个类:
class MyTableBase():
a = Column(int)
class MyClassOne(MyTableBase):
b = Column(int)
class MyObjectTwo(MyTableBase):
c = Column(int)
我想覆盖默认的查询(MyClassOne).all(),只返回a = 10和查询(MyClassTwo).all()的记录,只返回a = 20的记录。 / p>
这应该提供非常优雅的方式来在一个表中存储许多不同(但非常相似)的对象,同时在类/对象级别单独播放它们。
有什么建议吗?也许这是我缺乏搜索技能,但根本找不到它:/
更新:
我的代码现在:
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)
我的数据库表有两条记录 - 一条记录的值为“aaaa”,另一条记录的“bbbb”记录在“a”列中。查询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部分。
答案 0 :(得分:0)
如此处所示: Flask-SQLAlchemy Single Table Inheritance
所有子类中的正确答案是 __ tablename__ = None 。
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文档中不存在此信息:(
现在工作正常!