在 Flask 和 SQLAlchemy 中评估过滤器之前调用列值函数

Calling function on column value before evaluating filter in Flask and SQLAlchemy

我的问题:
假设我有一个 table 和一个 DateTime 列。我现在想查询匹配 Date.

的所有行

我的想法:

Table.query.filter(Table.datetime.date() == date_to_be_matched)

显然这不起作用,因为该列本身没有 date() 方法。我还尝试将 date_to_be_matched 转换为日期时间,但我需要访问当前 row/value 的时间,否则 == 评估将不起作用。

所以我的问题是如何在计算过滤器表达式之前调用 function/access 当前行和值。

我已经在此处查看了 SQLAlchemy 文档和许多其他问题,但找不到我的问题的答案。

在 SQL 中,您的查询将如下所示:

SELECT * FROM mytable WHERE date(datetime_column) = '2022-02-03';

要在 SQLAlchemy 中执行此操作,请使用相同的方法:将 RDBMS 的 date 函数*应用于要过滤的列。

import sqlalchemy as sa

Table.query(Table).filter(sa.func.date(Table.datetime) == date_to_be_matched)

* 从日期时间中提取日期部分的函数名称可能因 RDBMS 而异,并非所有 RDBMS 都提供此类函数。 SQLAlchemy 的 func 属性是 RDBMS 中的函数名称 ,因此如果 RDBMS 的等效函数是 get_date,那么您可以 sa.func.get_date(...) .