2017-06-27 33 views
2

考慮下面的例子,我如何根據給定的正則表達式使約束工作?在SQLAlchemy的'CheckConstraint'中使用正則表達式

在這種情況下,我在Flask應用程序中使用SQLAlchemy。

class user(db.Model): 
    iduser = db.Column(db.Integer, primary_key=True) 
    email = db.Column(db.String(45), unique=True) 
    CheckConstraint("REGEXP_LIKE(email,'^[a-zA-Z][a-zA-Z0-9_\.\-][email protected]([a-zA-Z0-9-]{2,}\.)+([a-zA-Z]{2,4}|[a-zA-Z]{2}\.[a-zA-Z]{2})$')", name='emailcheck') 

(我不是100%地肯定在最後一行的語法)

回答

2

CHECK約束需要在表本身,使用__table_args__

class user(db.Model): 
    ... 
    __table_args__ = (CheckConstraint("regexp_like(email, ...)", name=...),) 

你也可以把它在類之外,但SQLAlchemy需要知道它用於哪個表,因此您需要將約束寫爲表達式而不是字符串:

class user(db.Model): 
    ... 

CheckConstraint(func.regexp_like(user.email, ...), name=...) 
+0

我沒有工作。它根本不影響數據庫。 我應該注意到,我不太確定這個語法,其中「regexp_like(email,...)」全部作爲字符串發送......我用它作爲示例。 –

+0

@RafaelAuyer你是什麼意思,它沒有效果?你如何驗證它沒有效果? – univerio

+0

我想我需要重新創建表才能生效。 –

相關問題