3
我有以下以下模型:高級模型驗證
class Foo(DeclarativeBase):
code = Column(u'code', String(length=255))
ctype = Column(u'ctype', String(length=255))
我需要驗證一個領域,相對於另一個。
例如
if ctype == "bar" and code == "buzz": raise ValueError
不要創建犯數據庫對象和記錄。如果沒有發生異常,照例創建。
我試過使用。 Simple validators 並試圖建立「before_insert」使用before_insert mapper event 事件,並寫了這樣的代碼:
def validate_foo(mapper, connection, target):
if target.ctype == "bar" and target.code == "buzz":
raise ValueError
event.listen(Foo, 'before_insert', validate_foo)
當CTYPE ==「欄」和代碼==「嗡嗡」,它不會創建任何數據庫對象。它不會引發任何異常。但它創建Foo對象實例(不帶db)。
做這種驗證的最佳方法是什麼?
你如何定義「最好」?有些人可能想要直接在數據庫中進行驗證。其他人可能希望將它放入模型本身,而不需要與SQLAlchemy綁定。其他人可能想要使用上面顯示的SQLAlchemy事件。這個問題沒有「正確答案」。你真正的問題是爲什麼你的'validate_foo'方法沒有被調用?如果是這樣,你應該提供更多的細節(例如你可以運行的示例代碼,你希望啓動你的驗證事件,但它不會觸發) –
'validate_foo'實際上被調用,但它看起來像它在單獨調用線程等。而我的代碼沒有收到該例外。 –