reduce for proxied columns when syncing between mappers
Issue #2885
resolved
this is probably for backport to 0.8 as well
from sqlalchemy import select, Table, Column, Integer, ForeignKey, create_engine, Text, Float
from sqlalchemy.orm import Session
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Person(Base):
__table_actual__ = Table('person', Base.metadata,
Column('id', Integer, primary_key=True),
Column('name', Text),
Column('type', Text)
)
__table__ = select([__table_actual__](__table_actual__)).alias("person_alias")
__mapper_args__ = {"polymorphic_on": __table__.c.type, "polymorphic_identity": "Person"}
class Golfer(Person):
__tablename__ = "golfer"
id_person = Column(Integer, ForeignKey(Person.__table_actual__.c.id), primary_key=True)
handicap = Column(Float)
__mapper_args__ = {"polymorphic_identity": "Golfer"}
engine = create_engine('sqlite://', echo=True)
Base.metadata.create_all(engine)
session = Session(engine)
p1 = Person(name="Joe Bloggs")
session.add(p1)
g1 = Golfer(name="Tiger Woods", handicap=2.5)
session.add(g1)
session.commit()
print(g1.name)
patch:
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py
index b3b872f..bdaeca0 100644
--- a/lib/sqlalchemy/orm/mapper.py
+++ b/lib/sqlalchemy/orm/mapper.py
@@ -2488,7 +2488,8 @@ class Mapper(_InspectionAttr):
for m in self.iterate_to_root():
if m._inherits_equated_pairs and \
cols.intersection(
- [for l, r in m._inherits_equated_pairs](l)):
+ util.reduce(set.union,
+ [for l, r in m._inherits_equated_pairs](l.proxy_set))):
result[table](table).append((m, m._inherits_equated_pairs))
return result
Comments (2)
-
reporter -
reporter - removed milestone
Removing milestone: 0.8.xx (automated comment)
- Log in to comment
e294767148c7293170f36d56605853eb76f20714 0.8
1d9eb4101365e2c7b8d434fae403aa876ccbef59 0.9