通常为所有String字段剥离空格 - SQLAlchemy

问题描述 投票:0回答:1

我通过Flask-SQLAlchemy使用SQLAlchemy作为Web应用程序的ORM。

我想在分配给任何字符串字段时自动引导和尾随条带空格(例如str.strip)。

一种方法是执行此操作,但需要为每个字符串字段指定:

class User(db.Model):
    _email = db.Column('email', db.String(100), primary_key=True)
    @hybrid_property
    def email(self): return self._email
    @email.setter
    def email(self, data): self._email = data.strip()

我想更普遍地为每个String字段执行此操作(无需为每个字段编写上述内容)。

python orm sqlalchemy flask-sqlalchemy string-parsing
1个回答
2
投票

一种方法是创建一个处理这种处理的自定义augmented string type

from sqlalchemy.types import TypeDecorator

class StrippedString(TypeDecorator):

    impl = db.String

    def process_bind_param(self, value, dialect):
        # In case you have nullable string fields and pass None
        return value.strip() if value else value

    def copy(self, **kw):
        return StrippedString(self.impl.length)

然后在模型中用它代替普通的String

class User(db.Model):
    email = db.Column(StrippedString(100), primary_key=True)

这与您自己的实现完全不同,因为当将值作为参数绑定到查询时进行处理,或者换句话说稍后:

In [12]: u = User(email='     [email protected]     ')

In [13]: u.email
Out[13]: '     [email protected]     '

In [14]: session.add(u)

In [15]: session.commit()

In [16]: u.email
Out[16]: '[email protected]'
© www.soinside.com 2019 - 2024. All rights reserved.