Запрос Sqlalchemy возвращает десятичный объект - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующая модель:

  172  class ReportRecord(db.Model):                                                                                                                                                                                
  173     __tablename__ = 'tb_report_record'                                                                                                                                                                         174                                                                                                                                                                                                                175     id = db.Column(Integer, primary_key=True)                                                                                                                                                                
  176     report_id = db.Column(ForeignKey('tb_rua_report.id'), index=True)                                                                                                                                        
  177     source_ip = db.Column(String(100, 'utf8_bin'))                                                                                                                                                           
  178     count = db.Column(Integer)                                                                                                                                                                               
  179     disposition = db.Column(String(10, 'utf8_bin'))                                                                                                                                                          
  180     header_from = db.Column(String(100, 'utf8_bin'))                                                                                                                                                         
  181     spf_domain = db.Column(String(100, 'utf8_bin'))                                                                                                                                                          
  182     spf_result = db.Column(String(10, 'utf8_bin'))                                                                                                                                                           
  183     dkim_domain = db.Column(String(100, 'utf8_bin'))                                                                                                                                                         
  184     dkim_result = db.Column(String(10, 'utf8_bin'))                                                                                                                                                          
  185     isActive = db.Column(Integer, nullable=False, server_default=text("'1'"))                                                                                                                                  186     created_by = db.Column(String(100), nullable=False, server_default=text("'System'"))                                                                                                                     
  187     created_dt = db.Column(DateTime, nullable=False)                                                                                                                                                         
  188     last_modified_by = db.Column(String(100), nullable=False, server_default=text("'System'"))                                                                                                               
  189     last_modified_dt = db.Column(DateTime, server_default=text("CURRENT_TIMESTAMP"))                                                                                                                         
  190                                                                                                                                                                                                              
  191     report = db.relationship('RuaReport', backref=db.backref("record"))

Когда я выдаю следующий запрос из flasksqlalchemy

ReportRecord.query.filter(or_(ReportRecord.spf_result=="pass", ReportRecord.dkim_result=="pass")).with_entities(func.sum(ReportRecord.count).label('total_passed')).all()

, я получаю следующий вывод:

[(Decimal('930'),)]

Теперь полученное значение верное, но я не могу jsonify напрямую.Выполнение int(Decimal('930')) дает мне желаемый результат, но как по умолчанию преобразовать эти данные в правильный формат?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Это сработало для меня: включите это в ваш импорт:

from sqlalchemy import func

затем:

total_passed = db.session.query(func.sum(ReportRecord.count)).scalar()

Это возвращает 930 вместо [(Десятичное число ('930'),)]

Подробнее о .scalar ()

0 голосов
/ 18 мая 2018

Как насчет преобразования десятичного числа при его запросе?

Попробуйте int(func.sum(ReportRecord.count).label('total_passed'))

попробуйте принудительно заставить вашу БД преобразовывать значения в целое число, чтобы решить вашу проблему

Я не могу проверитьно есть функция приведения, которая также может быть полезна

from sqlalchemy.sql.expression import cast
cast(func.sum(ReportRecord.count).label('total_passed'),sqlalchemy.Integer)
...