i committed it to 0.7. technically the logic there should search up the chain of mappers for an FK in a parent table, its still making a bit of an assumption.
On Jun 16, 2011, at 1:24 PM, JPLaverdure wrote: > Fantastic ! And so quick to answer ! > > Thank you very much for your help, works like a charm now. > Has this patch been applied in the 0.7 release of sqlalchemy ? (I was > working with 0.6.7) > > JP > > On Jun 16, 12:05 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: >> apply this patch to history_meta.py >> >> diff -r 7c65c0cdd3c8 examples/versioning/history_meta.py >> --- a/examples/versioning/history_meta.py Tue Jun 14 19:57:21 2011 >> -0400 >> +++ b/examples/versioning/history_meta.py Thu Jun 16 12:04:43 2011 >> -0400 >> @@ -35,7 +35,7 @@ >> col.unique = False >> >> if super_mapper and col_references_table(column, >> super_mapper.local_table): >> - super_fks.append((col.key, >> list(super_history_mapper.base_mapper.local_table.primary_key)[0])) >> + super_fks.append((col.key, >> list(super_history_mapper.local_table.primary_key)[0])) >> >> cols.append(col) >> >> as you can see, the foreign key generation is pulling from the "base" mapper >> which isn't the case in a multilevel situation, it needs to pull the FKs >> from the immediate super-mapper. >> >> On Jun 16, 2011, at 11:20 AM, JPLaverdure wrote: >> >> >> >> >> >> >> >>> Hello, >> >>> I'm trying to use the versioning recipe describe on the website along >>> with a multi-level inheritance model (Joined-Table inheritance) >> >>> Here are my declarative statements: >> >>> [code] >>> class Sample(Base): >>> __metaclass__ = VersionedMeta >>> __tablename__ = 'sample' >>> __table_args__ = {'schema': 'test'} >> >>> id = Column(Integer, primary_key=True) >>> discriminator = Column('type', String(50)) >>> token = Column(String(128), nullable=False) >>> source_sample_id = Column(Integer, ForeignKey('test.sample.id')) >> >>> children = relationship("Sample", backref=backref('source_sample', >>> remote_side=id), single_parent=True) >> >>> __mapper_args__ = {'polymorphic_on': discriminator, >>> 'polymorphic_identity':'sample'} >> >>> def __init__(self, token, source_sample_id=None): >>> self.token = token >>> self.source_sample_id = source_sample_id >> >>> class Tissue(Sample): >>> __metaclass__ = VersionedMeta >>> __tablename__ = 'tissue' >>> __mapper_args__ = {'polymorphic_identity': 'tissue'} >>> __table_args__ = {'schema': 'test'} >> >>> id = Column(Integer, ForeignKey('test.sample.id'), >>> primary_key=True) >>> concentration = Column(String(32)) >> >>> def __init__(self, token, concentration, source_sample_id=None): >>> super(Sample, self).__init__(token, source_sample_id) >>> self.concentration = concentration >> >>> class LeukemicTissue(Tissue): >>> __metaclass__ = VersionedMeta >>> __tablename__ = 'leukemic_tissue' >>> __mapper_args__ = {'polymorphic_identity': 'leukemic_tissue'} >>> __table_args__ = {'schema': 'test'} >> >>> id = Column(Integer, ForeignKey('test.tissue.id'), >>> primary_key=True) >>> leukemia = Column(String) >> >>> def __init__(self, token, concentration, leukemia, >>> source_sample_id=None): >>> super(Tissue, self).__init__(token, concentration, >>> source_sample_id) >>> self.leukemia = leukemia >>> [/code] >> >>> Whenever I try to "create_all()" I get the following error: >>> sqlalchemy.exc.ArgumentError: Can't find any foreign key relationships >>> between 'tissue_history' and 'leucegene_tissue_history'. >> >>> Single level-inheritance works beautifully (ie if I stop at "Tissue" >>> and don't declare the "LeukemicTissue") but I really need a multi- >>> level inheritance scheme to work.. >> >>> Can anyone give me any pointers ? >> >>> Thanks !! >> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sqlalchemy" group. >>> To post to this group, send email to sqlalchemy@googlegroups.com. >>> To unsubscribe from this group, send email to >>> sqlalchemy+unsubscr...@googlegroups.com. >>> For more options, visit this group >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.