2015-08-27 3 views
2

В SQLAlchemy я использую:Изменить все номера до вставки или обновления

price = Column(Numeric(18, 5)) 

в различных помещены Повсеместно мое приложение. Когда я получаю число, отформатированное на шведском языке, вместо запятой вместо 0,34 вместо 0,34, и попробуйте изменить столбец цены, число будет установлено на 0,00000.

Чтобы решить эту проблему у меня есть этот код:

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

Но имея все это за код делает это довольно некрасиво и риск того, что я забыл одно место. Может ли быть какая-то универсальная функция конвертера, которая вызывается до того, как значение будет преобразовано из строки в числовое? И это у меня только в одном месте.

ответ

4

Проверить validates декоратор SQLAlchemy: http://docs.sqlalchemy.org/en/rel_1_0/orm/mapped_attributes.html

Быстрый способ добавить «проверки» рутина к атрибуту, чтобы использовать в Подтверждает() декоратор. Валидатор атрибутов может вызывать исключение , останавливая процесс изменения значения атрибута, или может изменить данное значение на что-то другое.

В вашем случае код может выглядеть примерно так:

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)