# Model mixins

## Timestamp

class `sqlalchemy_utils.models.``Timestamp`

  Adds created and updated columns to a derived declarative model.

  The created column is handled through a default and the updated column is handled through a before_update event that propagates for all derived declarative models.

      import sqlalchemy as sa
      from sqlalchemy_utils import Timestamp

      class SomeModel(Base, Timestamp):
          __tablename__ = 'somemodel'
          id = sa.Column(sa.Integer, primary_key=True)

## generic_repr

`sqlalchemy_utils.models.``generic_repr`(*fields)

  Adds generic `__repr__()` method to a declarative SQLAlchemy model.

  In case if some fields are not loaded from a database, it doesn’t force their loading and instead repesents them as `<not loaded>`.

  In addition, user can provide field names as arguments to the decorator to specify what fields should present in the string representation and in what order.

  Example:

      import sqlalchemy as sa
      from sqlalchemy_utils import generic_repr

      @generic_repr
      class MyModel(Base):
          __tablename__ = 'mymodel'
          id = sa.Column(sa.Integer, primary_key=True)
          name = sa.Column(sa.String)
          category = sa.Column(sa.String)

      session.add(MyModel(name='Foo', category='Bar'))
      session.commit()
      foo = session.query(MyModel).options(sa.orm.defer('category')).one(s)

      assert repr(foo) == 'MyModel(id=1, name='Foo', category=<not loaded>)'