Hello everybody. Is it possible to have the following relationships between three classes (Animal, Car, Description) ?
* An animal has an attribute description * A car has an attribute description * Each description contains his parent as an attribut. So parent can be a car or an animal Here is my code : from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship Base = declarative_base() class Description(Base): __tablename__ = "descriptions" id = Column(Integer, primary_key=True) name = Column(String) def __init__(self, name): self.name = name self.parent = None def __repr__(self): return self.name class Animal(Base): __tablename__ = "animals" id = Column(Integer, primary_key=True) name = Column(String) id_description = Column(Integer, ForeignKey("descriptions.id"), nullable = False) description = relationship("Description", backref = "parent") def __init__(self, name): self.name = name def __repr__(self): return self.name class Car(Base): __tablename__ = "cars" id = Column(Integer, primary_key=True) name = Column(String) id_description = Column(Integer, ForeignKey("descriptions.id"), nullable = False) description = relationship("Description", backref = "parent") def __init__(self, name): self.name = name def __repr__(self): return self.name engine = create_engine('YOUR DATABASE', echo = True) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() rex = Animal("Rex") swift = Car("Suzuki Swift") d1 = Description("Rex is a good dog.") d2 = Description("What a beautiful car !") rex.description = d1 d1.parent = rex swift.description = d2 d2.parent = swift session.add(rex) session.add(swift) session.add(d1) session.add(d2) session.commit() Error : Traceback (most recent call last): File "C:\Users\user\Desktop\test.py", line 56, in <module> rex = Animal("Rex") File "<string>", line 2, in __init__ File "C:\Python34\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 347, in _new_state_if_none state = self._state_constructor(instance, self) File "C:\Python34\lib\site-packages\sqlalchemy\util\langhelpers.py", line 767, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) File "C:\Python34\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 177, in _state_constructor self.dispatch.first_init(self, self.class_) File "C:\Python34\lib\site-packages\sqlalchemy\event\attr.py", line 256, in __call__ fn(*args, **kw) File "C:\Python34\lib\site-packages\sqlalchemy\orm\mapper.py", line 3129, in _event_on_first_init configure_mappers() File "C:\Python34\lib\site-packages\sqlalchemy\orm\mapper.py", line 3019, in configure_mappers mapper._post_configure_properties() File "C:\Python34\lib\site-packages\sqlalchemy\orm\mapper.py", line 1810, in _post_configure_properties prop.init() File "C:\Python34\lib\site-packages\sqlalchemy\orm\interfaces.py", line 184, in init self.do_init() File "C:\Python34\lib\site-packages\sqlalchemy\orm\relationships.py", line 1661, in do_init self._generate_backref() File "C:\Python34\lib\site-packages\sqlalchemy\orm\relationships.py", line 1851, in _generate_backref (backref_key, self, m)) sqlalchemy.exc.ArgumentError: Error creating backref 'parent' on relationship 'Animal.description': property of that name exists on mapper 'Mapper|Description|descriptions' It seems impossible to link the classes to the same attribute "parent" in the class "Description". Is there a solution ? Thank you for your help ! Olaf -- 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 post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.