SQLAlchemy 中的验证

2024-01-31

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

 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)

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


我猜你所说的空字段是指空字符串而不是 NULL。 A简单的方法 http://docs.sqlalchemy.org/en/latest/orm/mapped_attributes.html#simple-validators是添加验证,例如:

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

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

要在数据库级别实现它,您还可以使用检查约束 https://docs.sqlalchemy.org/en/latest/core/constraints.html#check-constraint,只要数据库支持:

class Article(Base):
    ...
    name = Column(Text, CheckConstraint('name!=""')
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy 中的验证 的相关文章

随机推荐