在SqlAlchemy中,我使用:
price = Column(Numeric(18, 5))
Run Code Online (Sandbox Code Playgroud)
以各种方式放置在我的应用中。当我得到一个用瑞典语格式化的数字时,用逗号而不是点(0,34代替0.34),并尝试更改价格列,该数字将设置为0.00000。
为了解决这个问题,我有以下代码:
obj.price = price.replace(',','.')
Run Code Online (Sandbox Code Playgroud)
但是,在代码中遍历所有内容会使它变得很丑陋,而这样做的风险是我忘记了一个地方。在将值从字符串转换为数字之前,是否有可能会调用某种通用的转换函数?而且我只将其放在一个地方。
检查validatesSQLAlchemy 的装饰器: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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |