基类A1
包含polymorphic_identity
(以及polymorphic_on
),但是Query(A1)
不会产生where子句,而Query(A2)
(其中{{1 }}是A2
的子类,它有自己的A1
)。
尝试查找文档失败。我想我只是想念一些东西。
polymorphic_identity
在两种情况下我都希望有from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Query, configure_mappers
Base = declarative_base()
class A1(Base):
__tablename__ = 'a1'
id = Column(Integer, primary_key=True)
poly_on = Column(String, nullable=False)
__mapper_args__ = {
'polymorphic_on': poly_on,
'polymorphic_identity': 'a1',
}
class A2(A1):
__mapper_args__ = {
'polymorphic_identity': 'a2',
}
configure_mappers()
print(Query(A1))
# SELECT a1.id AS a1_id, a1.poly_on AS a1_poly_on
# FROM a1
print(Query(A2))
# SELECT a1.id AS a1_id, a1.poly_on AS a1_poly_on
# FROM a1
# WHERE a1.poly_on IN (:poly_on_1)
子句。
更新这可以通过注入WHERE
的虚拟基类来实现,但是我想避免这种情况:我有数百个必须以这种方式进行更改的模型。>