我想以编程方式检查变量,看它是否是几个允许的字符串之一。我也可以在sql代码中添加一个检查约束,但我真的不想这样做。我知道我可以通过kwargs
访问传递给SQLAlchemy对象的参数。断言允许传入参数的最佳方法是什么?
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 :(得分:1)
如果要在Python (包括默认构造函数)中分配特定列时验证它,可以使用validates
装饰器:
class Attend(db.Model):
...
@validates("user_role"):
def _validate_user_role(self, key, value):
assert(user_role in GroupRoles.roles)
return value
然而,您的特定用例似乎更符合枚举:
user_role = db.Column(db.Enum(*GroupRoles.roles))
这会生成服务器端检查,表示该值有效。在SQLAlchemy 1.1(目前未发布)中,这也执行Python端检查,无需上面的_validate_user_role
函数(在SQLAlchemy 1.0及之前仍然需要)。