Python 炼金术中的验证
如何在SQLAlchemy中获得所需的验证器?实际上,我只是想确信用户在表单中填写了所有必填字段。我使用PostgreSQL,但没有意义,因为从models.py文件中的对象创建的表:Python 炼金术中的验证,python,sqlalchemy,pyramid,Python,Sqlalchemy,Pyramid,如何在SQLAlchemy中获得所需的验证器?实际上,我只是想确信用户在表单中填写了所有必填字段。我使用PostgreSQL,但没有意义,因为从models.py文件中的对象创建的表: from sqlalchemy import ( Column, Integer, Text, DateTime, ) from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.or
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
不起作用,因为在任何情况下添加的记录都带有空字段。例如,我当然可以通过将set name设置为notnull来设置数据库级别的限制。但是SQLAlchemy中肯定有一些关于验证的东西,不是吗?我来自yii php框架,这里根本没有问题。关于空字段,我猜您指的是空字符串,而不是空字符串。A是添加验证,例如:
class Article(Base):
...
name = Column(Text, unique=True)
...
@validates('name')
def validate_name(self, key, value):
assert value != ''
return value
要在数据库级别实现它,还可以使用,只要数据库支持:
class Article(Base):
...
name = Column(Text, CheckConstraint('name!=""')
...
谢谢你,伙计。它工作得很好。但实际上我不知道如何识别views.py中哪个验证器被激活了?我只能捕获AssertionError,但没有关于哪个字段错误的信息。因此,要么引发自定义异常,要么添加错误消息,例如,
AssertName!='''名称不能为空“
或如果名称==”;raise NyNameError
需要记住的一件重要事情是,验证decorator函数仅在设置属性时验证属性。如果您创建了一篇文章,并且没有在代码中设置名称,那么验证函数将永远不会被触发,它将在名称属性没有值的情况下将记录插入数据库。不要使用断言值!=''因为使用-O
选项运行python
会删除assert
语句。请记住,SQLAlchemy并非设计为验证框架:相反,它是一个数据库工具包,还可以用作ORM。类似于nullable
参数可以帮助您获取SQLAlchemy以生成SQL创建脚本(将列设置为notnull
)。因此,SQLAlchemy的设计目的是将验证问题留给您(如下所述使用验证
)、数据库本身(如使用检查约束
)或其他软件(如)。