运行 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())
...
在提交本文档之前,我想:
- trim 电子邮件字段外的任何前导和尾随空格
- 确保邮政编码是一个 5 位数字字符串(我将为此定义一个正则表达式)
- 自动查找对应的 latitude/longitude 邮政编码并将其保存在
lat
和 lng
字段中。
- 数据库架构无法执行的其他事情
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 类型。
我是 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())
...
在提交本文档之前,我想:
- trim 电子邮件字段外的任何前导和尾随空格
- 确保邮政编码是一个 5 位数字字符串(我将为此定义一个正则表达式)
- 自动查找对应的 latitude/longitude 邮政编码并将其保存在
lat
和lng
字段中。 - 数据库架构无法执行的其他事情
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 类型。