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
-~----------~----~----~----~------~----~------~--~---

Reply via email to