Распечатайте фактический sql, который генерируется вашим запросом, чтобы увидеть, что происходит.Например:
ld=LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp == datetime.date.today()), LunchDay.status==1))
print(ld)
Отпечатки:
SELECT lunch_day.id AS lunch_day_id, lunch_day.timestamp AS lunch_day_timestamp, lunch_day.status AS lunch_day_status
FROM lunch_day
WHERE DATE(lunch_day.timestamp = %(timestamp_1)s) AND lunch_day.status = %(status_1)s
Там вы видите, что равенство lunch_day.timestamp
и параметра timestamp_1
передается в функцию DATE
.
Что на самом деле довольно легко увидеть в вашем запросе sqlalchemy: func.DATE(LunchDay.timestamp == datetime.date.today())
.Я предполагаю, что вы хотите преобразовать LunchDay.timestamp
в дату и , затем сравнить ее с datetime.date.today()
, которая должна быть db.func.DATE(LunchDay.timestamp) == date.today()
.
print(LunchDay.query.filter(and_(func.DATE(LunchDay.timestamp) == datetime.date.today(), LunchDay.status == 1)))
отпечатков:
SELECT lunch_day.id AS lunch_day_id, lunch_day.timestamp AS lunch_day_timestamp, lunch_day.status AS lunch_day_status
FROM lunch_day
WHERE DATE(lunch_day.timestamp) = %(DATE_1)s AND lunch_day.status = %(status_1)s
Еще одна вещь, на которую следует обратить внимание: несколько операторов, переданных в filter()
, автоматически обрабатываются как and_()
, поэтому вы можете немного упростить свой запрос, убрав следующее:
LunchDay.query.filter(func.DATE(LunchDay.timestamp) == datetime.date.today(), LunchDay.status == 1)