【问题标题】:Modify all numbers before insert or update在插入或更新之前修改所有数字
【发布时间】:2015-11-21 12:44:44
【问题描述】:

在我使用的 SqlAlchemy 中:

price = Column(Numeric(18, 5))

通过我的应用程序放置在各种位置。当我得到一个瑞典语格式的数字时,用逗号而不是点(0,34 而不是 0.34)并尝试更改价格列,数字设置为 0.00000。

为了解决这个问题,我有这个代码:

obj.price = price.replace(',','.')

但是在整个代码中都有这样的东西会变得很丑陋,而且风险是我会忘记一个地方。是否有可能在将值从字符串转换为数字之前调用某种通用转换器函数?而且我只有一个地方。

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

    检查 SQLAlchemy 的 validates 装饰器:http://docs.sqlalchemy.org/en/rel_1_0/orm/mapped_attributes.html

    向属性添加“验证”例程的快速方法是使用 validates() 装饰器。属性验证器可以引发 异常,停止改变属性值的过程,或者 可以将给定的值更改为不同的值。

    在您的情况下,代码可能类似于:

    from sqlalchemy.orm import validates
    
    class Obj(Base):
        __tablename__ = 'obj'
    
        id = Column(Integer, primary_key=True)
        price = Column(Numeric(18, 5))
    
        @validates('price')
        def validate_price(self, key, price):
            if ',' in price:
                return float(price.replace(',','.'))
            else:
                return float(price)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多