id = Column(Integer, primary_key=True)
- class MyModel(Base,MyMixin):
+ class MyModel(MyMixin, Base):
name = Column(String(1000))
Where above, the class ``MyModel`` will contain an "id" column
from the name of the class itself, as well as ``__table_args__``
and ``__mapper_args__`` defined by the ``MyMixin`` mixin class.
+There's no fixed convention over whether ``MyMixin`` precedes
+``Base`` or not. Normal Python method resolution rules apply, and
+the above example would work just as well with::
+
+ class MyModel(Base, MyMixin):
+ name = Column(String(1000))
+
+Because "name" is only present on ``MyMixin``.
+
Augmenting the Base
~~~~~~~~~~~~~~~~~~~
class TimestampMixin(object):
created_at = Column(DateTime, default=func.now())
- class MyModel(Base, TimestampMixin):
+ class MyModel(TimestampMixin, Base):
__tablename__ = 'test'
id = Column(Integer, primary_key=True)
def address_id(cls):
return Column(Integer, ForeignKey('address.id'))
- class User(Base, ReferenceAddressMixin):
+ class User(ReferenceAddressMixin, Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
__mapper_args__= {'polymorphic_on':type_}
- class MyModel(Base,MyMixin):
+ class MyModel(MyMixin, Base):
__tablename__='test'
id = Column(Integer, primary_key=True)
def target(cls):
return relationship("Target")
- class Foo(Base, RefTargetMixin):
+ class Foo(RefTargetMixin, Base):
__tablename__ = 'foo'
id = Column(Integer, primary_key=True)
- class Bar(Base, RefTargetMixin):
+ class Bar(RefTargetMixin, Base):
__tablename__ = 'bar'
id = Column(Integer, primary_key=True)
def dprop(cls):
return deferred(Column(Integer))
- class Something(Base, SomethingMixin):
+ class Something(SomethingMixin, Base):
__tablename__ = "something"
def __tablename__(cls):
return cls.__name__.lower()
- class Person(Base,Tablename):
+ class Person(Tablename, Base):
id = Column(Integer, primary_key=True)
discriminator = Column('type', String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.ext.declarative import has_inherited_table
- class Tablename:
+ class Tablename(object):
@declared_attr
def __tablename__(cls):
if has_inherited_table(cls):
return None
return cls.__name__.lower()
- class Person(Base,Tablename):
+ class Person(Tablename, Base):
id = Column(Integer, primary_key=True)
discriminator = Column('type', String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.ext.declarative import has_inherited_table
- class Tablename:
+ class Tablename(object):
@declared_attr
def __tablename__(cls):
if (has_inherited_table(cls) and
return None
return cls.__name__.lower()
- class Person(Base,Tablename):
+ class Person(Tablename, Base):
id = Column(Integer, primary_key=True)
discriminator = Column('type', String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
__mapper_args__ = {'polymorphic_identity': 'engineer'}
# This is joined table inheritance
- class Manager(Person,Tablename):
+ class Manager(Tablename, Person):
id = Column(Integer, ForeignKey('person.id'), primary_key=True)
preferred_recreation = Column(String(50))
__mapper_args__ = {'polymorphic_identity': 'engineer'}
from sqlalchemy.ext.declarative import declared_attr
- class MySQLSettings:
+ class MySQLSettings(object):
__table_args__ = {'mysql_engine':'InnoDB'}
- class MyOtherMixin:
+ class MyOtherMixin(object):
__table_args__ = {'info':'foo'}
- class MyModel(Base,MySQLSettings,MyOtherMixin):
+ class MyModel(MySQLSettings, MyOtherMixin, Base):
__tablename__='my_model'
@declared_attr
def __table_args__(cls):
return (Index('test_idx_%s' % cls.__tablename__, 'a', 'b'),)
- class MyModel(Base,MyMixin):
+ class MyModel(MyMixin, Base):
__tablename__ = 'atable'
c = Column(Integer,primary_key=True)