在sqlalchemy中提交之前运行清洁/验证代码

时间:2015-01-30 03:29:30

标签: postgresql sqlalchemy

我对PostGreSQL和SQLAlchemy完全陌生,我试图弄清楚如何在SQLAlchemy模型提交到数据库之前运行验证/清理代码。我们的想法是确保数据一致性超出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())
   ...

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

  • 修剪任何领先&电子邮件字段中的尾随空格
  • 确保邮政编码是一个5位数的数字字符串(我将为此定义一个正则表达式)
  • 自动查找邮政编码的相应纬度/经度并将其保存在lat& lng字段。
  • 数据库架构无法执行的其他内容

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

1 个答案:

答案 0 :(得分:4)

我发现最简单的方法是挂钩更新并插入事件。 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类型。