运行 cleaning/validation 在 sqlalchemy 中提交之前的代码

Running cleaning/validation code before committing in sqlalchemy

我是 PostGreSQL 和 SQLAlchemy 的新手,我正在尝试弄清楚如何 运行 validation/cleaning 在 SQL提交到数据库之前的 Alchemy 模型。这个想法是为了确保数据的一致性,超出 SQL 数据库内置的标准类型实施。例如,如果我有一个基于 SQLAlchemy 模型的 User 模型,

class User(db.Model):
   ...
   email = db.Column(db.String())
   zipCode = db.Column(db.String())
   lat = db.Column(db.Float())
   lng = db.Column(db.Float())
   ...

在提交本文档之前,我想:

SQLAlchemy 是否提供了一种简单的方法来提供 Python 代码,保证 运行 在承诺执行这样的任意任务之前?

我发现最简单的方法是挂钩更新和插入事件。 http://docs.sqlalchemy.org/en/latest/orm/events.html

from sqlalchemy import event

def my_before_insert_listener(mapper, connection, target):
    target.email=target.email.trim()
    #All the other stuff

# associate the listener function with User,
# to execute during the "before_insert" hook
event.listen(
    User, 'before_insert', my_before_insert_listener)

您可以创建执行此类操作的自定义 sqlalchemy 类型。