SQLAlchemy中的验证

问题描述 投票:4回答:1

如何在SQLAlchemy中获取所需的验证器?实际上我只是想确保用户填写表格中的所有必填字段。我使用PostgreSQL,但它没有意义,因为从models.py文件中的Objects创建的表:

 from sqlalchemy import (
    Column,
    Integer,
    Text,
    DateTime,
    )

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    )

from zope.sqlalchemy import ZopeTransactionExtension

from pyramid.security import (
    Allow,
    Everyone,
    )

Base = declarative_base()


class Article(Base):
    """ The SQLAlchemy declarative model class for a Article object. """
    __tablename__ = 'article'

    id = Column(Integer, primary_key=True)
    name = Column(Text, nullable=False, unique=True)
    url = Column(Text, nullable=False, unique=True)
    title = Column(Text)
    preview = Column(Text)
    content = Column(Text)
    cat_id = Column(Integer, nullable=False)
    views = Column(Integer)
    popular = Column(Integer)
    created = Column(DateTime)

    def __unicode__(self):
        return unicode(self.name)

所以这个nullable=False不起作用,因为记录在任何情况下都添加了空字段。我当然可以通过将名称设置为NOT NULL来设置数据库级别的限制。但是必须有一些关于SQLAlchemy验证的东西不是吗?我来自yii php框架,那里根本不是问题。

python sqlalchemy pyramid
1个回答
11
投票

通过空字段,我猜你的意思是空字符串而不是NULL。 simple method是添加验证,例如:

class Article(Base):
    ...
    name = Column(Text, nullable=False, unique=True)
    ...

    @validates('name')
    def validate_name(self, key, value):
        assert value != ''
        return value

要在数据库级别实现它,您也可以使用check constraint,只要数据库支持它:

class Article(Base):
    ...
    name = Column(Text, CheckConstraint('name!=""')
    ...
© www.soinside.com 2019 - 2024. All rights reserved.