Testing

The functions in this module can be used for testing that the constraints of your models. Each assert function runs SQL UPDATEs that check for the existence of given constraint. Consider the following model:

class User(Base):
    __tablename__ = 'user'
    id = sa.Column(sa.Integer, primary_key=True)
    name = sa.Column(sa.String(200), nullable=True)
    email = sa.Column(sa.String(255), nullable=False)


user = User(name='John Doe', email='john@example.com')
session.add(user)
session.commit()

We can easily test the constraints by assert_* functions:

from sqlalchemy_utils import (
    assert_nullable,
    assert_non_nullable,
    assert_max_length
)

assert_nullable(user, 'name')
assert_non_nullable(user, 'email')
assert_max_length(user, 'name', 200)

# raises AssertionError because the max length of email is 255
assert_max_length(user, 'email', 300)

assert_min_value

sqlalchemy_utils.asserts.assert_min_value(obj, column, min_value)[source]

Assert that the given column must have a minimum value of min_value.

Parameters:
  • obj – SQLAlchemy declarative model object
  • column – Name of the column
  • min_value – The minimum allowed value for given column

assert_max_length

sqlalchemy_utils.asserts.assert_max_length(obj, column, max_length)[source]

Assert that the given column is of given max length. This function supports string typed columns as well as PostgreSQL array typed columns.

In the following example we add a check constraint that user can have a maximum of 5 favorite colors and then test this.:

class User(Base):
    __tablename__ = 'user'
    id = sa.Column(sa.Integer, primary_key=True)
    favorite_colors = sa.Column(ARRAY(sa.String), nullable=False)
    __table_args__ = (
        sa.CheckConstraint(
            sa.func.array_length(favorite_colors, 1) <= 5
        )
    )


user = User(name='John Doe', favorite_colors=['red', 'blue'])
session.add(user)
session.commit()


assert_max_length(user, 'favorite_colors', 5)
Parameters:
  • obj – SQLAlchemy declarative model object
  • column – Name of the column
  • max_length – Maximum length of given column

assert_max_value

sqlalchemy_utils.asserts.assert_max_value(obj, column, min_value)[source]

Assert that the given column must have a minimum value of max_value.

Parameters:
  • obj – SQLAlchemy declarative model object
  • column – Name of the column
  • max_value – The maximum allowed value for given column

assert_nullable

sqlalchemy_utils.asserts.assert_nullable(obj, column)[source]

Assert that given column is nullable. This is checked by running an SQL update that assigns given column as None.

Parameters:
  • obj – SQLAlchemy declarative model object
  • column – Name of the column

assert_non_nullable

sqlalchemy_utils.asserts.assert_non_nullable(obj, column)[source]

Assert that given column is not nullable. This is checked by running an SQL update that assigns given column as None.

Parameters:
  • obj – SQLAlchemy declarative model object
  • column – Name of the column