Сделать Sqlalchemy Использовать дату в фильтре Использование Postgresql
Я пытаюсь выполнить следующий запрос в Sqlalchemy.
Select * from "Mytable" where Date(date_time_field) = "2011-08-16";
Я попробовал несколько методов. Некоторые здесь, на SO.
Но никто не кажется "реалистичным", так как некоторые делают CastS Other String Formating?!?! а не простой простой Date() (по дате я означает дату Postgresql, а не Python One) в поле ORM.
Возможно ли на уровне ORM объявить простую дату() вокруг поля запроса?
С наилучшими пожеланиями
Антониу
Ответы
Ответ 1
Использование комментария @Ants Aasma.
И сохранить его для любого веб-поиска.
from sqlalchemy import Date, cast
from datetime import date
my_data = session.query(MyObject).\
filter(cast(MyObject.date_time,Date) == date.today()).all()
Спасибо всем, кто пытался решить эту проблему:)
Ответ 2
Собственные функции SQL могут быть вызваны с помощью func
module
from sqlalchemy import func
from datetime import date
my_data = session.query(MyObject).filter(
func.date(MyObject.date_time) == date.today()
).all()
Вызов func.date
from sqlalchemy import select, func
print select([func.date('2004-10-19 10:23:54')])
создаст следующий SQL:
SELECT date(:date_2) AS date_1
Вы также можете объявить свои собственные ярлыки для SQL-функций:
from sqlalchemy.sql.functions import GenericFunction
from sqlalchemy.types import DateTime
class convert_tz(GenericFunction):
"""
Sqlalchemy shortcut to SQL convert timezone function
:param DateTime datetime
:param str from_tz: The timezone the datetime will be converted from
:param str to_tz: The timezone the datetime will be converted from
:returns: Datetime in another timezone
:rtype: DateTime or None if timezones are invalid
"""
type = DateTime
Используется как:
from sqlalchemy import select, func
print select([func.convert_tz(func.now(), '+00:00', '-05:00')])
Он будет генерировать следующий SQL:
SELECT convert_tz(now(), :param_1, :param_2) AS convert_tz_1
Ответ 3
в postgreSQL, если date_time_field - это одно поле вашей таблицы, тогда quer должно понравиться.
Выберите * из Mytable, где date_time_field = '2011-08-16'