Estoy usando Jupyter Notebooks y conecté mi base de datos PostreSQL así:
%load_ext sql from sqlalchemy import create_engine Estoy usando la datetime y hora de Python y la biblioteca pytz para crear un objeto de fecha y hora consciente de la zona horaria:
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)Ahora, cuando intento hacer una consulta SQL, hago algo como esto para crear un marco de datos de pandas:
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) Sin embargo, en la línea start_time < {} , aparece este error:
ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "14" LINE 10: and start_time < 2020-06-16 14:07:00-05:00 Sin embargo, cuando compruebo los tipos y los valores de comparación del objeto de fecha y hora SQL start_time y mi objeto de fecha y hora de Python creado, la comparación funciona normalmente (si omito la comparación start_time < {} ):
test = events_query['start_time'].values[0] print(test) print(start) print(test > start)Esto imprimirá:
2038-11-25 12:00:00-05:00 2020-06-16 14:07:00-05:00 True Lo que he probado alternativamente En lugar de usar la notación .format() , también he intentado usar Python f-strings para insertar la variable de start , además de usar el formato del operador %. El error fue el mismo al comparar start_time con una variable.
Lo siento, esta es la segunda vez que publico en SO, avíseme si formateé mi pregunta correctamente.