SQLAlchemy将纪元时间转换为分组日期

时间:2018-11-19 09:28:11

标签: python python-2.7 orm sqlalchemy flask-sqlalchemy

我正在使用Sqlalchemy作为PSQL数据库的ORM。我的时间戳记以纪元时间存储在我的数据库中,例如1525868337991。(以毫秒为单位)

我正在编写一个查询,以获取特定日期(按日期分组)的雇员人数。我找不到任何方法可以在ORM查询中将纪元转换为日期,例如psql具有 to_timestamp 。该查询写在下面:

employees_details = db.session.query(
      func.count(EmployeeInfo.id).label("employee_count"), EmployeeInfo.employee_created_on, EmployeeSourceInfo.employee_source_display_name
    ).join(
      EmployeeSourceInfo, EmployeeInfo.lead_source_id == EmployeeSourceInfo.id
    ).group_by(func.as_utc(EmployeeInfo.employee_created_on), EmployeeSourceInfo.employee_source_display_name).all()

1 个答案:

答案 0 :(得分:2)

SQLAlchemy中的func是通用的,可用于生成几乎所有SQL函数表达式。考虑到这一点,您可以简单地将func.as_utc替换为

func.to_timestamp(EmployeeInfo.employee_created_on / 1000.0)

然后将其截断为一个日期,或者将其强制转换为一个日期:

from sqlalchemy import Date

func.to_timestamp(EmployeeInfo.employee_created_on / 1000.0).cast(Date)

或使用Postgresql特定功能date_trunc()将生成的时间戳减少为日精度:

func.date_trunc('day', func.to_timestamp(EmployeeInfo.employee_created_on / 1000.0))