Hello, I'm currently writing my own version of the "magic" orm. I'd like it to generate id columns automatically. I tried it like shown below.
When using the code I get an exception: ArgumentError: Mapper Mapper|Version|version could not assemble any primary key columns for mapped table 'Join object on content(55261328) and version(64443600)' The problem seems to be in the WithId metaclass. When I put an id = Column(... primary = true) by hand on the Version class everything works. I was expecting the metaclass to do the same, but apparently there must be some difference, Any idea how I can make the Base/Content/Version classes have id columns (which work with polymorphism) automatically? I'd like to stay away from mixin class all over the place. -Matthias Code: class WithId(DeclarativeMeta): def __init__(cls,classname, bases, dict_): if 'id' not in dict_: dict_['id'] = Column('id', Integer, ForeignKey('content.id'), primary_key=True) DeclarativeMeta.__init__(cls, classname, bases, dict_) Base = declarative_base(metaclass=WithId) class Content(db.Base): id = db.Column('id', db.Integer, primary_key=True) type = db.Column(db.String(250)) @classmethod def get_class_name(cls): '''Convert CamelCase class name to underscores_between_words table name.''' name = cls.__name__ return ( name[0].lower() + re.sub(r'([A-Z])', lambda m:"_" + m.group(0).lower(), name[1:]) ) @db.declared_attr def __tablename__(cls): return cls.get_class_name() @db.declared_attr def __mapper_args__(cls): args = { 'polymorphic_identity' : cls.get_class_name() } ContentClass = cls.__bases__[-1] if ContentClass is db.Base: args['polymorphic_on'] = cls.type else: args['inherit_condition'] = (cls.id == ContentClass.id) return args class Version(Content): timestamp = Column(DateTime, default=datetime.datetime.now) message = Column(UnicodeText) #author = attribute(User, backref = collectionAttribute('authoredVersions')) -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@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.