But How can i do ? It seems i need to define the table in AsbtractContainer but every time I've an error about already defined column.
Cheers, Julien. On Mon, Sep 27, 2010 at 10:30 PM, Michael Bayer <mike...@zzzcomputing.com> wrote: > > On Sep 27, 2010, at 4:21 PM, Julien Iguchi-Cartigny wrote: > >> Thank you Michael. This solves the problem and... shows a new one. >> >> So this is my update CourseSet >> >> class CourseSet(Base,AbstractContainer): >> >> �...@classproperty >> def __mapper_args__(self): >> args = dict() >> args.update(AbstractContainer.__mapper_args__) >> args.update({'polymorphic_identity': >> 'org.sakaiproject.coursemanagement.impl.CourseSetCmImpl'}) >> return args >> >> Because there is several discriminant values, I need to create other ones: >> >> class CanonicalCourse(Base,AbstractContainer): >> >> �...@classproperty >> def __mapper_args__(self): >> args = dict() >> args.update(AbstractContainer.__mapper_args__) >> args.update({'polymorphic_identity': >> 'org.sakaiproject.coursemanagement.impl.CanonicalCourseCmImpl'}) >> return args >> >> >> But this last one will fail, i've the following error message: >> >> sqlalchemy.exc.InvalidRequestError: Table 'CM_MEMBER_CONTAINER_T' is >> already defined for this MetaData instance. Specify >> 'useexisting=True' to redefine options and columns on an existing >> Table object. >> >> I could use useexisting=True but i don't know if it's the right >> solution. Any ideas ? > > that has to do with a Table() statement, or alternatively how you are > configuring __table_name__, neither of which are indicated here, so you need > to ensure that distinct table names are used whenever a table name is > declared. > > > > >> >> Cheers, >> >> Julien. >> >> On Mon, Sep 27, 2010 at 1:02 AM, Michael Bayer <mike...@zzzcomputing.com> >> wrote: >>> >>> On Sep 26, 2010, at 6:38 PM, Julien Iguchi-Cartigny wrote: >>> >>>> Hi, >>>> >>>> I'm trying to use polymorphic_on with several inheritances: >>>> >>>> engine = create_engine( >>>> 'mysql://xxx:y...@localhost:3306/zzz?charset=utf8&use_unicode=0', >>>> pool_recycle=3600, echo=True) >>>> >>>> Base = declarative_base() >>>> >>>> class AbstractPersistent(object): >>>> version = Column('VERSION', Integer) >>>> last_modified_by = Column('LAST_MODIFIED_BY', String(255)) >>>> last_modified_date = Column('LAST_MODIFIED_DATE', Date) >>>> created_by = Column('CREATED_BY', String(255)) >>>> created_date = Column('CREATED_DATE', Date) >>>> >>>> class AbstractNamed(AbstractPersistent): >>>> eid = Column('ENTERPRISE_ID', String(255)) >>>> title = Column('TITLE', String(255)) >>>> description = Column('DESCRIPTION', String(255)) >>>> >>>> class AbstractContainer(AbstractNamed): >>>> __tablename__ = 'CM_MEMBER_CONTAINER_T' >>>> id = Column('MEMBER_CONTAINER_ID',Integer,primary_key=True) >>>> discriminator = Column('CLASS_DISCR', String(100)) >>>> __mapper_args__ = {'polymorphic_on': discriminator } >>>> >>>> class CourseSet(Base,AbstractContainer): >>>> __mapper_args__ = {'polymorphic_identity': >>>> 'org.sakaiproject.coursemanagement.impl.CourseSetCmImpl'} >>> >>> AbstractContainer is not mapped, its a mixin, so its __mapper_args__ are >>> not used until a subclass of Base is invoked, which starts up a declarative >>> mapping. Your only mapped class then is CourseSet, which has its own >>> __mapper_args__ , that override those of AbstractContainer - they are >>> ignored. >>> >>> To combine __mapper_args__ from a mapped class with those of a mixin, see >>> the example at >>> http://www.sqlalchemy.org/docs/orm/extensions/declarative.html?highlight=declarative#combining-table-mapper-arguments-from-multiple-mixins >>> . It uses __table_args__ but the same concept of creating a full >>> dictionary of arguments applies for __mapper_args__ as well. >>> >>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "sqlalchemy" group. >>> To post to this group, send email to sqlalch...@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. >>> >>> >> >> >> >> -- >> "Trouble-a-cat limited" >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To post to this group, send email to sqlalch...@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. >> > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@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. > > -- "Trouble-a-cat limited" -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@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.