python - 在 sqlalchemy 字段中将值强制为大写的最佳方法

标签 python sqlalchemy field uppercase

我是 python 和 sqlalchemy 的新手,想寻求建议。

插入/更新记录时强制 SqlAlchemy 字段中的大写值的最佳方法是什么?我应该为此使用事件吗?这里我使用的是 flask-sqlalchemy 版本,但我相信它类似于 SQLAlchemy。

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class Item(db.Model):
    # I need to ensure the code column converts values to uppercase automatically
    code = db.Column(db.String(30), primary_key=True)
    name = db.Column(db.String(250), nullable=False)
    ...

谢谢指教

最佳答案

验证者可以很容易地做到这一点:

from sqlalchemy.orm import validates

class Item(db.Model):
    # I need to ensure the code column converts values to uppercase automatically
    code = db.Column(db.String(30), primary_key=True)
    name = db.Column(db.String(250), nullable=False)
    
    @validates('code', 'name')
    def convert_upper(self, key, value):
        return value.upper()

可以对 descriptors or hybrids 采取类似的方法,尽管一次将相同的突变应用于多个列并不是那么容易。 Hybrids确实提供了一些额外的好处,因为在查询中使用它们可以将工作委托(delegate)给 DBMS 而不是在 Python 端执行工作(尽管对于这种特殊情况,在 Python 端执行工作实际上不会花费你任何费用)。

需要说明的是,验证器应用于模型级别;您必须构建 Item 类才能从中受益(例如,使用 Item.__table__ 直接操作表将绕过模型的验证器)。

关于python - 在 sqlalchemy 字段中将值强制为大写的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321976/

相关文章:

python - 将值转换为 %

python - 如何为列表中的每个项目听写(zip)?

python - 使用日期列删除所有表中早于时间段的所有数据

python - 在 Intel Edison 上用 Python 模拟按键事件

python - 如何修复Python 3.7中的 'RuntimeError: input(): lost sys.stdin'错误

python - 从 SQLAlchemy KeyedTuple 获取某些字段的更好方法

python - 如何在 SQLAlchemy Alembic 迁移中更新记录?

java - 如何从java/android中的字符串变量创建字段ID

mysql - 更新多行替换mysql中特定位置的字符

django - 如何覆盖 Django 管理更改表单中的字段值显示