no bug in contains_column: from sqlalchemy import *
m = MetaData() table = Table('t2', m, Column('asl_id', Integer, ForeignKey('public.asl_list_view.asl_id')), schema='public' ) asl_list_view = Table('asl_list_view', m, Column('asl_id', Integer), schema='public' ) print table.foreign_keys print table.foreign_keys[0].column print table.foreign_keys[0].column.table.schema print asl_list_view.c['asl_id'] print asl_list_view.c['asl_id'].table.schema print asl_list_view.c.contains_column(table.foreign_keys[0].column) print table.join(asl_list_view) On Jan 12, 2009, at 5:45 PM, _t...@arcor.de wrote: > > mapper.add_property( 'zzz', relation( llm_mapper, ... ) ) fails with: > ArgumentError: Could not determine join condition between parent/ > child tables on relation .... > Specify a 'primaryjoin' expression. If this is a many-to-many > relation, 'secondaryjoin' is needed as well. > > > but the foreign key exists: > (Pdb) llm_mapper.local_table.foreign_keys > OrderedSet([ForeignKey('public.asl_list_view.asl_id')]) > (Pdb) llm_mapper.local_table.foreign_keys[0].column > Column('asl_id', Integer(), table=<asl_list_view>, primary_key=True, > nullable=False) > (Pdb) llm_mapper.local_table.foreign_keys[0].column.table.schema > 'public' > (Pdb) mapper.local_table.c['asl_id'] > Column('asl_id', Integer(), table=<asl_list_view>, primary_key=True, > nullable=False) > (Pdb) mapper.local_table.c['asl_id'].table.schema > 'public' > > > the problem seems to be in the containes_column Method: > (Pdb) mapper.local_table.c.contains_column > ( llm_mapper.local_table.foreign_keys[0].column ) > False > > A litte workarround solves the problem (expression.py): > def contains_column(self, col): > # have to use a Set here, because it will compare the identity > # of the column, not just using "==" for comparison which will > always return a > # "True" value (i.e. a BinaryClause...) > # orig { > #return col in util.column_set(self) > # } > # workarround { > col_name = "%s" % col > for _c in util.column_set(self): > if col_name == "%s" % _c: > return True > return False > # } > > test: > (Pdb) mapper.local_table.c.contains_column > ( llm_mapper.local_table.foreign_keys[0].column ) > True > > ...and the property is successfully added > > I hope it helps. > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---