Gibt es eine Möglichkeit, transparent ausführen der überprüfung auf SQLAlchemy Objekte?

Gibt es eine Möglichkeit, um die Validierung auf ein Objekt, nach der (oder als) die Eigenschaften festgelegt werden aber vor der Sitzung begangen?

Zum Beispiel habe ich ein domain model Device hat eine mac Eigenschaft. Ich möchte, um sicherzustellen, dass die mac Eigenschaft enthält eine gültige und sanitized mac-Wert, bevor es Hinzugefügt oder aktualisiert in der Datenbank.

Sieht es aus wie die Pythonic Ansatz zu tun die meisten Dinge, die als Eigenschaften (einschließlich SQLAlchemy). Wenn ich hatte, codiert diese in PHP oder Java, würde ich wahrscheinlich entschieden haben, erstellen Sie getter/setter-Methoden zum Schutz der Daten und geben mir die Flexibilität, mit der diese in das domain-Modell selbst.

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);
}

Was ist ein Pythonic way zu behandeln diese Art von situation mit SQLAlchemy?

(Während ich bin mir bewusst, dass die Validierung und sollte behandelt werden an anderer Stelle (D. H., web-Frameworks), würde ich gerne herausfinden, wie zu handhaben einige dieser domain-spezifische Validierung Regeln, wie Sie gebunden sind, kommen Häufig vor.)

UPDATE

Ich weiß, dass ich verwenden könnte, Eigenschaft zu tun, unter normalen Umständen. Das wichtige ist, dass ich mit SQLAlchemy mit diesen Klassen. Ich verstehe nicht genau, wie SQLAlchemy ist in der Ausführung seiner Magie, aber ich vermute, dass das erstellen und überschreiben Sie diese Eigenschaften auf meine eigenen könnte führen zu instabilen und/oder unvorhersehbaren Ergebnissen.

Schreibe einen Kommentar