#python #sql-server #sqlalchemy
Вопрос:
Моя база данных-SQL Server 2008.
Тип символа времени, который я хочу запросить в базе данных (например, finishdate), — это datetime2
Мне просто нужны данные между «10-11» и «10-17». При использовании Sqlalchemy я использую
cast(FinishDate, DATE).between(cast(time1, DATE),cast(time2, DATE))
для запроса дат, но он не возвращает никаких данных (я подтверждаю, что должны быть какие-то данные, соответствующие диапазону времени запроса)
==============================================
from sqlalchemy import DATE
bb = "2021-10-11 12:21:23"
cc = "2021-10-17 16:12:34"
record = session.query(sa.Name cast(sa.FinishDate, DATE)).filter(
cast(sa.SamplingTime, DATE).between(cast(bb, DATE), cast(cc, DATE)),
sa.SamplingType != 0
).all()
или
record = session.query(sa.Name cast(sa.FinishDate, DATE)).filter(
cast(sa.SamplingTime, DATE)>= cast(bb, DATE),
sa.SamplingType != 0
).all()
Оба возвращаются []
Что-то не так с моим кодом, и я не знаю, в чем проблема.
Комментарии:
1. Вы пробовали начинать с
bb
cc
объектов Python datetime.date или datetime.datetime и в качестве них?2. Да, попробуйте удалить
cast
звонки и после этого, это может повлиять на сравнение.3. Но мои входные данные не поддерживают этот метод записи.
Ответ №1:
Это работает на меня, я только изменил ДАТУ, которую вы используете на сегодняшний день
from sqlalchemy import Date
record = session.query(
sa.Name cast(sa.FinishDate, Date)
).filter(
cast(sa.SamplingTime, Date).between(
cast(bb, Date), cast(cc, Date)
),
sa.SamplingType != 0
).all()
На самом деле первым параметром приведения также может быть строка, поэтому в этом случае можно передать дату как строку в приведении.
:param expression: A SQL expression, such as a
:class:`_expression.ColumnElement`
expression or a Python string which will be coerced into a bound
literal value.
Комментарии:
1. Я так ценю ваше объяснение!
2. Как ты и сказал,у меня это не работает. @Ананд Трипати
3. Странно, что это должно сработать, и это сработало и для меня тоже. можете ли вы проверить дату, которая указана в bb и cc и других переменных, или вы можете просто распечатать(записать) запрос без .all (), он напечатает запрос в необработанном формате