【发布时间】:2013-11-04 16:52:11
【问题描述】:
我有以下型号:
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 mapper event 设置“before_insert”事件 并写了这样的代码:
def validate_foo(mapper, connection, target):
if target.ctype == "bar" and target.code == "buzz":
raise ValueError
event.listen(Foo, 'before_insert', validate_foo)
当 ctype == "bar" 和 code == "buzz" 时,它不会在 DB 中创建任何对象。它不会引发任何异常。但它会创建 Foo 对象实例(没有 db)。
进行此类验证的最佳方法是什么?
【问题讨论】:
-
您如何定义“最佳”?有些人可能希望将此验证直接放在数据库中。其他人可能希望将其放入模型本身而不与 SQLAlchemy 绑定。其他人可能想要使用上面显示的 SQLAlchemy 事件。这个问题没有“正确答案”。您的实际问题是为什么没有调用您的
validate_foo方法?如果是这样,您应该提供更多详细信息(例如,您可以在您希望触发验证事件但它没有触发的地方运行示例代码) -
validate_foo实际上被调用了,但看起来它是在单独的线程中调用的。而且我的代码没有收到该异常。
标签: python validation sqlalchemy