在 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(...)
.
我的问题:
假设我有一个 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(...)
.