gpt4 book ai didi

python - 一般删除所有字符串字段的空格 - SQLAlchemy

转载 作者:行者123 更新时间:2023-11-30 22:13:12 24 4
gpt4 key购买 nike

我通过 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()

我想对每个字符串字段更通用地执行此操作(无需为每个字段编写上述内容)。

最佳答案

一种方法是创建自定义 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)

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

In [12]: u = User(email='     <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b8cbd796d5cddbd0f8cfd0d1ccdd96cbc8d9dbdd" rel="noreferrer noopener nofollow">[email protected]</a>     ')

In [13]: u.email
Out[13]: ' <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="01726e2f6c7462694176696875642f7271606264" rel="noreferrer noopener nofollow">[email protected]</a> '

In [14]: session.add(u)

In [15]: session.commit()

In [16]: u.email
Out[16]: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4b7abeaa9b1a7ac84b3acadb0a1eab7b4a5a7a1" rel="noreferrer noopener nofollow">[email protected]</a>'

关于python - 一般删除所有字符串字段的空格 - SQLAlchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com