【问题标题】:Sqlalchemy query returns Decimal objectSqlalchemy 查询返回 Decimal 对象
【发布时间】:2018-05-18 10:34:43
【问题描述】:

我有以下型号:

  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')) 确实给了我想要的结果,但是将这些数据转换为正确格式的默认方法是什么?

【问题讨论】:

    标签: casting sqlalchemy flask-sqlalchemy sqldatatypes


    【解决方案1】:

    这对我有用: 将其包含在您的导入中:

    from sqlalchemy import func
    

    然后:

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

    这将返回 930 而不是 [(Decimal('930'),)]

    阅读更多关于.scalar()

    【讨论】:

      【解决方案2】:

      查询时转换小数怎么样?

      试试int(func.sum(ReportRecord.count).label('total_passed'))

      尝试强制您的数据库将值转换为整数应该可以解决您的问题

      我无法检查,但有一个转换函数可能也很有用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-16
        • 2017-08-23
        • 2021-09-15
        • 2020-07-07
        • 2023-03-29
        • 2019-01-07
        • 1970-01-01
        相关资源
        最近更新 更多