2016-03-04 110 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和之前仍然是必需的)。