hi all!
i'm dealing with a little problem here. i have a parent table and its
two inheritances. there is a value that both children have and must be
unique along either types. is there a way to move this column to the
parent and use a constraint in the child? my implementation is postgres
9.4+ with psycopg2 only.
as a simple example (i'm just creating this example to simplify things),
this works:
____________
class MyParent(Base):
foo_id = Column(Integer, Sequence('foo_id_seq'), primary_key=True)
foo_name = Column(Unicode(64), nullable=False)
foo_type = Column(Integer, nullable=False)
__mapper_args__ = {
"polymorphic_on": foo_type,
"polymorphic_identity": 0
}
class MyChild1(MyParent):
foo_id = Column(Integer, ForeignKey(MyParent.foo_id),
primary_key=True)
bar_id = Column(Integer, ForeignKey(AnotherEntity.bar_id),
nullable=False)
child1_specific_name = Column(Unicode(5), nullable=False)
child1_baz_stuff = Column(Boolean, default=False)
__mapper_args__ = {
"polymorphic_identity": 1
}
__table_args__ = (
UniqueConstraint(bar_id, child1_specific_name,), # works,
bar_id is in MyChild1
)
class MyChild2(MyParent):
foo_id = Column(Integer, ForeignKey(MyParent.foo_id),
primary_key=True)
bar_id = Column(Integer, ForeignKey(AnotherEntity.bar_id),
nullable=False)
child2_specific_code = Column(UUID, nullable=False)
child2_baz_stuff = Column(Float, nullable=False)
__mapper_args__ = {
"polymorphic_identity": 2
}
__table_args__ = (
UniqueConstraint(bar_id, child2_specific_code,), # works,
bar_id is in MyChild2
)
____________
but i would like to do this, if possible:
____________
class MyParent(Base):
foo_id = Column(Integer, Sequence('foo_id_seq'), primary_key=True)
foo_name = Column(Unicode(64), nullable=False)
foo_type = Column(Integer, nullable=False)
bar_id = Column(Integer, ForeignKey(AnotherEntity.bar_id),
nullable=False) # since both child uses bar_id, why not having it
on the parent?
__mapper_args__ = {
"polymorphic_on": foo_type,
"polymorphic_identity": 0
}
class MyChild1(MyParent):
foo_id = Column(Integer, ForeignKey(MyParent.foo_id),
primary_key=True)
child1_specific_name = Column(Unicode(5), nullable=False)
child1_baz_stuff = Column(Boolean, default=False)
__mapper_args__ = {
"polymorphic_identity": 1
}
__table_args__ = (
UniqueConstraint(MyParent.bar_id, child1_specific_name,),
# will it work?
)
class MyChild2(MyParent):
foo_id = Column(Integer, ForeignKey(MyParent.foo_id),
primary_key=True)
child2_specific_code = Column(UUID, nullable=False)
child2_baz_stuff = Column(Float, nullable=False)
__mapper_args__ = {
"polymorphic_identity": 2
}
__table_args__ = (
UniqueConstraint(MyParent.bar_id, child2_specific_code,),
# will it work?
)
____________
well, will it work without being a concrete inheritance? :)
best regards,
richard.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.