Рассмотрим параметризацию (отраслевой стандарт при использовании SQL на прикладном уровне), так как объект datetime
Python может переводиться в тип Oracle date
.
И да, вы можете параметризовать в Pandas с помощью read_sql()
, используя аргумент params (который не нуждается в оболочке pd.DataFrame()
).Кроме того, вам не нужны F-строки, поэтому эта версия может работать в любой версии Python.
sql = """SELECT PROD_ID, ID, COUNT, DATE_ADDED
FROM LZE.APODAT
WHERE DATE_ADDED < ? AND DATE_ADDED > ?
"""
my_df = pd.read_sql(sql, conn, params=[date_today, date_yesterday])
В противном случае конвертировать в строку (без десятичных микросекунд) и использовать Oracle * TO_DATE()
:
sql = """SELECT PROD_ID, ID, COUNT, DATE_ADDED
FROM LZE.APODAT
WHERE DATE_ADDED < TO_DATE(?, 'YYYY-MM-DD HH:MI:SS')
AND DATE_ADDED > TO_DATE(?, 'YYYY-MM-DD HH:MI:SS')?
"""
my_df = pd.read_sql(sql, conn, params=[date_today.strftime("%Y-%m-%d %H:%M:%S"),
date_yesterday.strftime("%Y-%m-%d %H:%M:%S")]
)