我想创建一个新的列类型,在分配时会自动转换为大写。到目前为止,我有以下代码:
class CodeColumn(db.TypeDecorator):
impl = db.String
def process_bind_param(self, value, dialect):
return value.upper()
def process_result_value(self, value, dialect):
return value.upper()
class Item(db.Model):
__tablename__ = 'item'
code = db.Column(CodeColumn(30), primary_key=True)
name = db.Column(db.String(128), nullable=False)
它似乎有效,但只在db.session.commit()上将值转换为大写:
./manage.py shell
>>> i = Item()
>>> i.code = 'apple200'
>>> i.code
'apple200'
>>> i.name = 'Apples 200'
>>> db.session.add(i)
>>> db.session.flush()
>>> i.code
'apple200'
>>> db.session.commit()
>>> i.code
'APPLE200'
>>>
是否可以在不向各列添加实现(如属性设置器)而是向TypeDecorator添加实现的情况下修改代码,以便在首次分配时这些字段的值自动转换为大写?
我知道我可以通过事件或属性设置器实现效果,但我希望有一个自定义列类型,以避免在多个位置设置这些事件和设置器。
由于