相关疑难解决方法(0)

有没有办法透明地对SQLAlchemy对象执行验证?

有没有办法在设置属性之后但在提交会话之前对对象执行验证?

例如,我有一个Device具有mac属性的域模型.我想确保在将mac属性添加到数据库或在数据库中更新之前,该属性包含有效且已清理的mac值.

看起来像Pythonic方法是做大多数事情作为属性(包括SQLAlchemy).如果我用PHP或Java编写过这个,我可能会选择创建getter/setter方法来保护数据,并让我灵活地在域模型中处理这个问题.

public function mac() { return $this->mac; }
public function setMac($mac) {
    return $this->mac = $this->sanitizeAndValidateMac($mac);
}
public function sanitizeAndValidateMac($mac) {
    if ( ! preg_match(self::$VALID_MAC_REGEX) ) {
        throw new InvalidMacException($mac);
    }
    return strtolower($mac);
}
Run Code Online (Sandbox Code Playgroud)

什么是使用SQLAlchemy处理此类情况的Pythonic方法?

(虽然我知道验证并且应该在其他地方处理(即Web框架),但我想弄清楚如何处理这些特定于领域的验证规则,因为它们必然经常出现.)

UPDATE

我知道在正常情况下我可以使用财产来做到这一点.关键部分是我在这些类中使用SQLAlchemy.我不明白SQLAlchemy究竟是如何表现它的魔力但我怀疑自己创建和覆盖这些属性可能导致不稳定和/或不可预测的结果.

python dns validation model sqlalchemy

17
推荐指数
3
解决办法
6115
查看次数

标签 统计

dns ×1

model ×1

python ×1

sqlalchemy ×1

validation ×1