sal*_*adi 1 python orm sqlalchemy string-parsing flask-sqlalchemy
我通过 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()
Run Code Online (Sandbox Code Playgroud)
我想对每个 String 字段更通用地执行此操作(无需为每个字段编写上述内容)。
一种方法是创建处理此类处理的自定义增强字符串类型:
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)
Run Code Online (Sandbox Code Playgroud)
然后String,您可以在模型中使用它代替普通的:
class User(db.Model):
email = db.Column(StrippedString(100), primary_key=True)
Run Code Online (Sandbox Code Playgroud)
这与您自己的实现并不完全相同,因为当值作为参数绑定到查询时,或者换句话说,稍后会发生处理:
In [12]: u = User(email=' so.much@white.space ')
In [13]: u.email
Out[13]: ' so.much@white.space '
In [14]: session.add(u)
In [15]: session.commit()
In [16]: u.email
Out[16]: 'so.much@white.space'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2293 次 |
| 最近记录: |