首页 > 解决方案 > 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()

标签: pythonpython-2.7ormsqlalchemyflask-sqlalchemy

解决方案


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))

推荐阅读