2016-03-04 85 views
0

我想以编程方式检查变量以查看它是否是几个允许的字符串之一。我也可以在sql代码中添加一个检查约束,但我并不想那么做。我知道我可以通过kwargs访问传递给SQLAlchemy对象的参数。什么是最好的什么来断言允许通过论证?然而SQLAlchemy,以编程方式检查参数

class Attend(db.Model): 
    ... 
    @validates("user_role"): 
    def _validate_user_role(self, key, value): 
     assert(user_role in GroupRoles.roles) 
     return value 

您的特定用途的情况下,:

class Attend(db.Model): 
    __tablename__ = 'attend' 
    uid = db.Column(db.Integer, db.ForeignKey('user.uid'), primary_key=True) 
    gid = db.Column(db.Integer, db.ForeignKey('group.gid'), primary_key=True) 
    # assert(user_role in GroupRoles.roles) -- want to do something like this 
    user_role = db.Column(db.String) 
    user = db.relationship('User', back_populates='registered_groups') 
    group = db.relationship('Group', back_populates='registered_users') 
+0

您可以使用枚举类型而不是'String'列类型 – Connie

回答

1

如果您想验证一个特定的列当它在Python分配的(包括默认的构造函数),你可以使用validates装饰,似乎符合一个枚举更好:

user_role = db.Column(db.Enum(*GroupRoles.roles)) 

这就产生服务器端检查该值是有效的。在SQLAlchemy 1.1(目前还没有发布)中,它也执行Python端检查,无需使用上面的函数(在SQLAlchemy 1.0和之前仍然是必需的)。