Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Flask-Mixer -- Flask sqlalchemy model object generation
branch: master
Failed to load latest commit information.
docs Change license to BSD
flask_mixer Update version
tests Fix nullable FK
.gitignore Add docs
.gitmodules Add flask theme
.travis.yml fix build
Changelog Update version
DESCRIPTION Initial commit
LICENSE fix license Initial commit
Makefile Fix nullable FK
README.rst Fix warn
deprecated.png fix image size Fix setup




This module is depricated. Use instead.

Flask-Mixer is simply application for generate instances of SQLAlchemy models. It's useful for testing. Fast and convenient test-data generation.

Flask-Mixer is in early development.

Build Status


  • python >= 2.6
  • Flask >= 0.8
  • Flask-SQLAlchemy>=0.16


Flask-Mixer should be installed using pip:

pip install Flask-Mixer



from flask import Flask
from flask.ext.mixer import Mixer
from flask.ext.sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    score = db.Column(db.Integer, default=50, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
    username = db.Column(db.String(20), nullable=False)

class Role(db.Model):
    __tablename__ = 'role'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey(, nullable=False)

    user = db.relation(User)

class Profile(db.Model):
    __tablename__ = 'profile'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), nullable=False)
    user = db.relationship("User", uselist=False, backref="profile")

mixer = Mixer(app, session_commit=True)

with app.test_request_context():

    # Simple model generation
    user1 = mixer.blend(User)
    assert and user1.username and user1.created_at
    assert user1.score == 50
    assert user.profile.user == user

    # Generate model with some values
    user2 = mixer.blend(User, username='test')
    assert user2.username == 'test'

    # Model would be defined as string
    role1 = mixer.blend('app.models.Role')
    assert role1.user
    assert role1.user_id ==

    # Generate model with reference
    role1 = mixer.blend(Role, user__username='test2')
    assert role2.user.username == 'test2'

    # Set related values from db by random
    profiles = Profile.query.all()
    user = mixer.blend(User, profile=mixer.random)
    assert user.profile in profiles

    # By default, column with defvalue will be to init as them
    # but you can still force set it to random value
    user = mixer.blend(User, score=mixer.random)
    assert user.score != 50

    # Value can be callable
    user = mixer.blend(User, username=lambda:'callable_value')
    assert user.username == 'callable_value'

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to the issue tracker at


Development of flask-mixer happens at github:


  • klen (Kirill Klenov)


Licensed under a BSD license.

Something went wrong with that request. Please try again.