В идеале мы хотим, чтобы проверка применялась как на уровне базы данных через ограничение, так и , а также в нашей модели, отвергая попытки установить свойство в слишком короткую строку даже перед попыткой сохранить его в база данных. Мы можем сделать первое с CheckConstraint
, используя функцию char_length
, а второе добавив валидатор . Ниже приведен пример, который обеспечивает минимальную длину 3 символа для some_string
:
from sqlalchemy import Column, String, BigInteger
from sqlalchemy.schema import CheckConstraint
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import validates
Base = declarative_base()
class MyTable(Base):
__tablename__ = 'my_table'
id = Column('id', BigInteger, primary_key=True)
some_string = Column('some_string', String(256), nullable=False)
__table_args__ = (
CheckConstraint('char_length(some_string) > 2',
name='some_string_min_length'),
)
@validates('some_string')
def validate_some_string(self, key, some_string) -> str:
if len(some_string) <= 2:
raise ValueError('some_string too short')
return some_string