Hi, I have a similar task, so I tried to use your proposal, but it didn't work for me:
=== from sqlalchemy import types as satypes from sqlalchemy import schema as saschema from sqlalchemy.engine import create_engine from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta from sqlalchemy.orm import scoped_session, sessionmaker class BaseType(DeclarativeMeta): def __init__(newcls, classname, bases, dict_): newcls.notes = saschema.Column(satypes.String) DeclarativeMeta.__init__(newcls, classname, bases, dict_) MetaData = saschema.MetaData(bind=create_engine('sqlite:///:memory:')) Session = scoped_session(sessionmaker(bind=MetaData.bind)) Base = declarative_base(metadata=MetaData, mapper=Session.mapper, metaclass=BaseType) class MasterEntity(Base): __tablename__ = "master" id = saschema.Column(satypes.Integer, primary_key=True) status = saschema.Column(satypes.CHAR(length=1), default="A") print [ _c.key for _c in MasterEntity.__table__.columns ] # ['id', 'status'] # => the 'notes' column is missing === snip So, what am I doing wrong? Thanks in advance, Frank Btw.: Hello group and many thanks to Michael for this great piece of software! On Dec 16, 6:58 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > anabstractbaseclassisn't going to set up the same fields on all > descendants since the mapper()/Table() setup occurs during the > creation of the individualclassusing the non-inheritedclassdict, > and unique instances of each of the Column, etc. elements are required > as well. > > "concrete inheritance", as referenced in that post, was not designed > to be used as a configurational spacesaver and always requires a > mapped selectable for the "base", which you don't have here, so it's > not appropriate for this use case. > > So for this you'd need a custom metaclass: > > classMyMeta(DeclarativeMeta): > def __init__(cls, classname, bases, dict_): > cls.notes = Column(String) > DeclarativeMeta.__init__(cls, classname, bases, dict_) > > Base= declarative_base(metaclass=MyMeta) > > On Dec 16, 2008, at 12:36 PM, Joril wrote: > > > > > Hi everyone! > > I need to declare a few unrelated classes (from a "business" > > perspective) that share some attributes/fields, so I thought I could > > use anabstractclassto group these common attributes (note that just > > a few classes should have them, not every one) > > > This post > >http://groups.google.it/group/sqlalchemy/msg/d3de02f609a0bbd9?hl=it > > suggests to use mixins, but I can't get it to work, SQLA generates the > > tables without the common fields. > > > I'm testing it with this script: > > >> from sqlalchemy.ext.declarative import declarative_base > >> from sqlalchemy import Column, Integer, String > >> from sqlalchemy import create_engine > > >> # --- Tables definition > >>Base= declarative_base() > > >>classAbstract(object): > >> notes = Column(String) > > >>classConcrete(Base,Abstract): > >> __tablename__ = 'concrete' > >> id = Column(Integer, primary_key=True) > >> # --- > > >> # DB creation > >> engine = create_engine('sqlite:///:memory:', echo=True) > >>Base.metadata.create_all(engine) > > > Here's the sql call: > >> CREATE TABLE concrete ( > >> id INTEGER NOT NULL, > >> PRIMARY KEY (id) > >> ) > > > What am I missing? Did I misunderstood how the mixin should be used? > > (I'm using SQLA 0.5rc4) > > > Many thanks! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---