Я использую Jupyter Notebooks и подключил свою базу данных Postre SQL следующим образом:
%load_ext sql
from sqlalchemy import create_engine
Я использую Python s datetime
и pytz
библиотеку для создания часового пояса осведомлен объект datetime:
import pandas as pd
import datetime as dt
import pytz
from pytz import timezone
eastern = timezone('EST')
now = dt.datetime.now()
start = dt.datetime(now.year, now.month, now.day - 2, now.hour, now.minute, tzinfo=eastern)
Теперь, когда я пытаюсь сделать запрос SQL, я делаю что-то вроде этого, чтобы создать pandas DataFrame:
events_query = pd.read_sql(
"""\
SELECT start_time,
end_time,
FROM events
WHERE room_id=2
AND deleted=false
AND start_time < {}
limit 3
""".format(start), engine)
Однако в строке start_time < {}
я получаю эту ошибку:
ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "14"
LINE 10: and start_time < 2020-06-16 14:07:00-05:00
Однако, когда я проверяю типы и значения сравнения объекта datatime SQL start_time и созданного мной Python объект datetime, сравнение работает нормально (если я опущу сравнение start_time < {}
):
test = events_query['start_time'].values[0]
print(test)
print(start)
print(test > start)
Будет напечатано:
2038-11-25 12:00:00-05:00
2020-06-16 14:07:00-05:00
True
То, что я пробовал в качестве альтернативы Вместо использования обозначения .format()
я также попытался использовать Python f-строки для вставки переменной start
, а также использовать форматирование оператора%. Ошибка была такой же при сравнении start_time
с переменной.
Извините, это моя вторая публикация на SO, дайте мне знать, правильно ли я отформатировал свой вопрос.