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 <[email protected]> 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 [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/CACwCsY78enZdOfFZ4Pjx0efTebNyMeTady72z-piiM-VSq6CpA%40mail.gmail.com.
> 

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/6a0edecd-d9b2-4442-8941-0d06c171cf4e%40www.fastmail.com.

Reply via email to