mysql - 服务器端的 SQLAlchemy 日期时间操作

标签 mysql sqlalchemy

我有一个包含计划和过去付款的表格,我需要查找同一用户/契约(Contract)在同一周内是否有任何两次收费。

select count(*) from charge as c1, charge as c2 
where c1.id_contract = c2.id_contract 
  and c1.status = 'SUCCESS' 
  and c2.status in ('SUCCESS', 'PENDING', 'WAITING') 
  and c1.id > c2.id and c2.due_time > (c1.due_time - interval 7 day);

我很难在 sqlalchemy 中重现此查询,主要是因为我找不到如何以与数据库无关的形式将 MySQL 的“间隔”转换为 SQLAlchemy。

到目前为止,我想出了这个,它翻译了所有内容,但间隔:

db.session.query(Charge, OldCharge).filter(Charge.id_contract == OldCharge.id_contract, Charge.status=='WAITING', OldCharge.status.in_(('SUCCESS', 'PENDING')), Charge.id > OldCharge.id).count()

有什么想法吗?

最佳答案

如果您只在 DAY 时需要它(这是默认间隔),那么只需将您的 SQL 重述为:

c2.due_time > ADDDATE(c1.due_time, - 7)

可以用 SA 术语写成:

filter(Charge.due_time > func.ADDDATE(OldCharge.due_time, -7))

如果您需要过滤不同的时间间隔类型(周、月、年),您可能需要编写自定义 SQL Construct 编译器(有关详细信息,请参阅 Custom SQL Constructs and Compilation Extension)。

关于mysql - 服务器端的 SQLAlchemy 日期时间操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12540175/

相关文章:

mysql - 选择date_add mysql问题

php - 过去 x 个月的排名查询

python - 将现有数据库与 django python 一起使用

python - 将值列表从 Python 传递到 SQL 查询的 IN 子句

python - 使用 fastapi-contrib 的 FastApi 分页错误

mysql - 考虑到可扩展性关联表的最佳方法是什么

php 转 excel 编码

mysql.sock 正在使用错误的权限创建。什么定义了套接字的权限?

python - SQLAlchemy 在多线程应用程序中正确的 session 处理

python - 在 SQLAlchemy 中获取相关模型