Сделать дату использования Sqlalchemy в фильтре используя Postgresql - PullRequest
19 голосов
/ 16 августа 2011

Я пытаюсь выполнить следующий запрос в Sqlalchemy.

Select * from "Mytable" where Date(date_time_field) = "2011-08-16";

Я пробовал несколько методов.Некоторые здесь на ТАК.Но ни один из них не кажется "реалистичным", так как некоторые из них делают Casts Other String Formating?!?!а не простая простая дата () (под датой я имею в виду дату Postgresql, а не Python One) в поле ORM.

Возможно ли на уровне ORM объявить простую дату() вокруг запрашиваемого поля?

С наилучшими пожеланиями Антонио

Ответы [ 3 ]

50 голосов
/ 18 августа 2011

Использование @Ants Aasma Comment.

И чтобы сохранить его в чистоте для любого веб-поиска.

from sqlalchemy import Date, cast
from datetime import date

my_data = session.query(MyObject).\
filter(cast(MyObject.date_time,Date) == date.today()).all()

Спасибо всем, кто пытался решить эту проблему:)

10 голосов
/ 15 июля 2014

Собственные функции 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
1 голос
/ 16 августа 2011

в postgreSQL, если поле date_time_field - это одно поле вашей таблицы, тогда запрос должен быть таким.Выберите * из Mytable, где date_time_field = '2011-08-16'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...