python orm sqlalchemy python-2.6

python - Error de relación SQLAlchemy: el objeto no tiene atributo ''c''



orm python-2.6 (1)

no puedes decir esto

Venues = relation(''Venue'', primaryjoin=''EventType.id==Event.event_type_id'', secondary=Event, secondaryjoin=''Event.venue_id==Venue.id'')

necesitarías decir esto:

Venues = relation(''Venue'', primaryjoin=''EventType.id==Event.event_type_id'', secondary=Event.__table__, secondaryjoin=''Event.venue_id==Venue.id'')

"secundario" solo espera un objeto Table, no una clase mapeada.

También tenga en cuenta que SQLAlchemy recomienda el patrón de objeto de asociación , en lugar de realizar configuraciones "secundarias" sofisticadas, para mantener este tipo de cosas más claras.

Usé sqlautocode para generar mi modelo y todas las relaciones. Estoy tratando de hacer una consulta simple como

obj = session.query(Venue).filter(Venue.symbol=="CARNEGIE_HALL").one()

Por algún motivo sigo recibiendo este mensaje de error:

File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/relationships.py", line 331, in _annotate_present_fks secondarycols = util.column_set(self.secondary.c) AttributeError: ''Event'' object has no attribute ''c''

Si comento las definiciones de relación, entonces la consulta anterior funciona. Las definiciones de relación generadas por sqlautocode me parecen correctas pero soy nuevo en SqlAlchemy. No estoy seguro de cómo solucionar esto. Intenté cambiar de relación () a relación () pero sigo teniendo el mismo error.

Usando sqlalchemy 0.8.2 y sqlautocode 0.6.

Tenga en cuenta que hay una relación de muchos a uno entre Event y Event_Type y una relación de varios a uno entre Event y Venue.

model.py

DeclarativeBase = declarative_base() metadata = DeclarativeBase.metadata metadata.bind = engine Event = Table(u''Event'', metadata, Column(u''id'', INTEGER(), primary_key=True, nullable=False), Column(u''venue_id'', INTEGER(), ForeignKey(''Venue.id''), nullable=False), Column(u''event_type_id'', INTEGER(), ForeignKey(''Event_Type.id''), nullable=False), ) Venue = Table(u''Venue'', metadata, Column(u''id'', INTEGER(), ForeignKey(''Obj.id''), primary_key=True, nullable=False), Column(u''venue_type_id'', INTEGER(), ForeignKey(''Venue_Type.id''), nullable=False), Column(u''name'', VARCHAR(length=100), nullable=False), Column(u''symbol'', VARCHAR(length=50), nullable=False), ) class Event(DeclarativeBase): __table__ = Event #relation definitions Event_Type = relation(''EventType'', primaryjoin=''Event.event_type_id==EventType.id'') Venue = relation(''Venue'', primaryjoin=''Event.venue_id==Venue.id'') class EventType(DeclarativeBase): __tablename__ = ''Event_Type'' __table_args__ = {} #column definitions code = Column(u''code'', VARCHAR(length=50), nullable=False) description = Column(u''description'', VARCHAR(length=250)) id = Column(u''id'', INTEGER(), primary_key=True, nullable=False) name = Column(u''name'', VARCHAR(length=100), nullable=False) #relation definitions Venues = relation(''Venue'', primaryjoin=''EventType.id==Event.event_type_id'', secondary=Event, secondaryjoin=''Event.venue_id==Venue.id'') class Venue(DeclarativeBase): __table__ = Venue #relation definitions Event_Types = relation(''EventType'', primaryjoin=''Venue.id==Event.venue_id'', secondary=Event, secondaryjoin=''Event.event_type_id==EventType.id'')

Registro de errores

mod_wsgi (pid=10861): Exception occurred processing WSGI script ''/home/uname/web/html/foo/app/main.py''. Traceback (most recent call last): File "/home/uname/web/html/foo/app/main.py", line 208, in application return callback(environ, start_response) File "/home/uname/web/html/foo/app/main.py", line 68, in monitor obj = session.query(Venue).filter(Venue.symbol=="CARNEGIE_HALL").one() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/session.py", line 1106, in query return self._query_cls(entities, self, **kwargs) File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 115, in __init__ self._set_entities(entities) File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 124, in _set_entities self._set_entity_selectables(self._entities) File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 157, in _set_entity_selectables ent.setup_entity(*d[entity]) File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 2728, in setup_entity self._with_polymorphic = ext_info.with_polymorphic_mappers File "/usr/lib64/python2.6/site-packages/sqlalchemy/util/langhelpers.py", line 614, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/mapper.py", line 1426, in _with_polymorphic_mappers configure_mappers() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/mapper.py", line 2121, in configure_mappers mapper._post_configure_properties() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/mapper.py", line 1243, in _post_configure_properties prop.init() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/interfaces.py", line 231, in init self.do_init() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/properties.py", line 1028, in do_init self._setup_join_conditions() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/properties.py", line 1102, in _setup_join_conditions can_be_synced_fn=self._columns_are_mapped File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/relationships.py", line 115, in __init__ self._annotate_fks() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/relationships.py", line 311, in _annotate_fks self._annotate_present_fks() File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/relationships.py", line 331, in _annotate_present_fks secondarycols = util.column_set(self.secondary.c) AttributeError: ''Event'' object has no attribute ''c''