如何在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框架,那里根本不是问题。
通过空字段,我猜你的意思是空字符串而不是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!=""')
...