带有TypeDecorator

时间:2016-01-01 10:37:59

标签: python sqlalchemy

新年快乐。祝你在2016年一切顺利。

我想创建一个新的列类型,在分配时会自动转换为大写。到目前为止,我有以下代码:

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添加实现的情况下修改代码,以便在首次分配时这些字段的值自动转换为大写?

我知道我可以通过事件或属性设置器实现效果,但我希望有一个自定义列类型,以避免在多个位置设置这些事件和设置器。

由于

0 个答案:

没有答案