SQLAlchemy 0.7 - максимальная длина столбца - PullRequest
4 голосов
/ 21 октября 2011

Я использую рецепт максимальной длины столбца SQLAlchemy из моего предыдущего вопроса ( SQLAlchemy - максимальная длина столбца ).Поскольку я обновил до SQLAlchemy 0.7, LengthValidator не может быть установлен с использованием следующего выражения:

inst.impl.extensions.insert (0, LengthValidator (col.type.length))

Атрибут extension не определен в SQLAchemy 0.7.Есть ли способ как поменять рецепт на работу с 0,7?

Спасибо, хонзас

Ответы [ 2 ]

9 голосов
/ 24 октября 2011

Ниже приведено решение Антса, переписанное с помощью системы событий SQLAlchemy:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import ColumnProperty
from sqlalchemy import event

def check_string_length(cls, key, inst):
    prop = inst.prop
    # Only interested in simple columns, not relations
    if isinstance(prop, ColumnProperty) and len(prop.columns) == 1:
        col = prop.columns[0]
        # if we have string column with a length, install a length validator
        if isinstance(col.type, String) and col.type.length:
            max_length = col.type.length
            def set_(instance, value, oldvalue, initiator):
                if len(value)>max_length:
                    raise ValueError("Length %d exceeds allowed %d" % \
                                            (len(value), max_length))
            event.listen(inst, 'set', set_)

Base = declarative_base()

event.listen(Base, 'attribute_instrument', check_string_length)
1 голос
/ 24 октября 2011

Вы можете использовать sqlalchemy.orm.validates decorator :

@validates('name')
def validate_name(self, key, name):
    assert len(name) <= 50
    return name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...