SQLAlchemy Filter基于表的字段的函数

时间:2014-08-31 22:32:49

标签: python sqlalchemy

我正在尝试根据表的某个属性的函数来过滤查询。例如,假设我有一个表Days,其中包含day类型的属性DateTime。现在我只想选择当天恰好是星期一的行,例如:

db.query(Days).filter(Days.days.strftime('%w')=='1')

但这不起作用! SQLAlchemy不知何故认为日子是另一个表,而strftime不是该表的属性。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

编写查询时,您必须意识到要访问的列是SQLAlchemy列,而不是Python值。一旦您查看查询结果中的实际行,它们将只是Python值。编写查询时,需要根据SQL表达式对其进行短语。

数据库之间的日期表达式不同。对于PostgreSQL,使用extract()函数,该函数返回0(星期日)到6(星期六)的数字。对于MySQL,使用dayofweek函数,它返回1(星期日)到7(星期六)的数字。

# PostgreSQL
from sqlalchemy.sql import extract
session.query(MyTable).filter(extract('dow', MyTable.my_date) == 1)

# MySQL
from sqlalchemy import func
session.query(MyTable).filter(func.dayofweek(MyTable.my_date) == 2)