On Tue, Dec 15, 2020 at 10:21 AM Mike Bayer <mike...@zzzcomputing.com> wrote:
>
>
>
> On Tue, Dec 15, 2020, at 9:17 AM, Larry Martell wrote:
>
> Yes, I have:
>
> class BusinessArea(Base):
> .
> .
> .
> Contact = relationship('Contact', secondary='BusinessAreaContact')
>
> Is there anything I can do now to be able to proceed with my development?
>
>
> Ah I in fact noticed something else which is that your table name matches 
> your class name!   OK well that explains why that's like this and....I should 
> probably do something about that as well, ill add that to the bug I'm fixing.
>
> For now the forms that will work are:
>
> direct table:
>
> Contact = relationship("Contact", secondary=BusinessAreaContact.__table__)
>
> or use a lambda, if BusinessAreaContact is not imported yet:
>
> Contact = relationship("Contact", secondary=lambda: 
> BusinessAreaContact.__table__)


Thanks! That worked for me.


> if you have a large application and you can't get BAC imported there or get 
> at its table, here's a worst case workaround:
>
> # work around SQLAlchemy issue #5774
> def get_bac_table():
>     from myapp import BusinessAreaContact
>     return BusinessAreaContact.__table__
>
> Contact = relationship("Contact", secondary=get_bac_table)
>
>
>
>
>
>
> On Tue, Dec 15, 2020 at 9:07 AM Mike Bayer <mike...@zzzcomputing.com> wrote:
> >
> > Thanks for that.
> >
> > So I think I'm going to make a small change here because I'm amazed that 
> > this is the error you're getting, for something that is likely a very 
> > common mistake and we should be checking for this.
> >
> > It seems likely, as I can reproduce this exactly here, that somewhere in 
> > your model you have something like this:
> >
> > class Something(...):
> >     # ...
> >     things = relationship(SomethignElse, secondary=BusinessAreaContact)
> >
> > the mappers are trying to configure themselves and are tripping over that; 
> > it expects the "secondary" argument to be an instance of Table, not a 
> > mapped class.
> >
> > so like:
> >
> > class Something(...):
> >     # ...
> >     things = relationship(SomethignElse, 
> > secondary=BusinessAreaContact.__table__)
> >
> > but again I'm amazed we aren't checking for this?   so i want to fix that 
> > now.  thanks for reporting!
> >
> >
> >
> >
> >
> >
> > On Tue, Dec 15, 2020, at 8:58 AM, Larry Martell wrote:
> >
> > File "/var/task/common/repository.py", line 74, in delete_all
> > res = self._session.query(model).delete()
> > File "/opt/python/sqlalchemy/orm/session.py", line 1558, in query
> > return self._query_cls(entities, self, **kwargs)
> > File "/opt/python/sqlalchemy/orm/query.py", line 191, in __init__
> > self._set_entities(entities)
> > File "/opt/python/sqlalchemy/orm/query.py", line 219, in _set_entities
> > self._set_entity_selectables(self._entities)
> > File "/opt/python/sqlalchemy/orm/query.py", line 250, in 
> > _set_entity_selectables
> > ent.setup_entity(*d[entity])
> > File "/opt/python/sqlalchemy/orm/query.py", line 4187, in setup_entity
> > self._with_polymorphic = ext_info.with_polymorphic_mappers
> > File "/opt/python/sqlalchemy/util/langhelpers.py", line 883, in __get__
> > obj.__dict__[self.__name__] = result = self.fget(obj)
> > File "/opt/python/sqlalchemy/orm/mapper.py", line 2141, in
> > _with_polymorphic_mappers
> > configure_mappers()
> > File "/opt/python/sqlalchemy/orm/mapper.py", line 3255, in configure_mappers
> > mapper._post_configure_properties()
> > File "/opt/python/sqlalchemy/orm/mapper.py", line 1950, in
> > _post_configure_properties
> > prop.init()
> > File "/opt/python/sqlalchemy/orm/interfaces.py", line 196, in init
> > self.do_init()
> > File "/opt/python/sqlalchemy/orm/relationships.py", line 1984, in do_init
> > self._setup_join_conditions()
> > File "/opt/python/sqlalchemy/orm/relationships.py", line 2048, in
> > _setup_join_conditions
> > self._join_condition = jc = JoinCondition(
> > File "/opt/python/sqlalchemy/orm/relationships.py", line 2408, in __init__
> > self._determine_joins()
> > File "/opt/python/sqlalchemy/orm/relationships.py", line 2504, in
> > _determine_joins
> > self.secondaryjoin = join_condition(
> > File "<string>", line 2, in join_condition
> > File "<string>", line 2, in _join_condition
> > File "/opt/python/sqlalchemy/util/deprecations.py", line 128, in warned
> > return fn(*args, **kwargs)
> > File "/opt/python/sqlalchemy/sql/selectable.py", line 932, in 
> > _join_condition
> > constraints = cls._joincond_scan_left_right(
> > File "/opt/python/sqlalchemy/sql/selectable.py", line 987, in
> > _joincond_scan_left_right
> > b.foreign_keys, key=lambda fk: fk.parent._creation_order
> > AttributeError: type object 'BusinessAreaContact' has no attribute
> > 'foreign_keys'
> >
> > On Tue, Dec 15, 2020 at 8:50 AM Mike Bayer <mike...@zzzcomputing.com> wrote:
> > >
> > > hey there -
> > >
> > > I don't know what that is.  Can you share the complete stack trace?  that 
> > > would show me where it is misinterpreting something.  thanks!
> > >
> > >
> > >
> > > On Tue, Dec 15, 2020, at 7:48 AM, Larry Martell wrote:
> > >
> > > I have this model class:
> > >
> > > class BusinessAreaContact(Base):
> > >     __tablename__ = 'BusinessAreaContact'
> > >
> > >     businessAreaID = Column(ForeignKey('BusinessArea.businessAreaID'),
> > > primary_key=True, nullable=False)
> > >     contactEmail = Column(ForeignKey('Contact.contactEmail'),
> > > primary_key=True, nullable=False)
> > >
> > > If I try and delete from the table with:
> > >
> > > session.query(BusinessAreaContact).delete()
> > >
> > > I get:
> > >
> > > AttributeError: type object 'BusinessAreaContact' has no attribute
> > > 'foreign_keys'
> > >
> > > I have other models where I define FKs in the same way, and I do not
> > > get that error with those. What makes this model different and how can
> > > I fix this error?
> > >
> > > Thanks!

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/CACwCsY5GsvoQOoxRtpOjwxAm3dcMMmVNwngNGk8MVE7chN6kYQ%40mail.gmail.com.

Reply via email to