首页 > 解决方案 > 在查询中比较 SQL 日期时间对象和 Python 日期时间对象的正确方法是什么?

问题描述

我正在使用 Jupyter Notebooks 并像这样连接了我的 PostreSQL 数据库:

%load_ext sql
from sqlalchemy import create_engine

我正在使用 Pythondatetimepytz库来创建一个时区感知日期时间对象:

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

但是,当我检查 SQL start_time 数据时间对象和我创建的 Python 日期时间对象的类型和比较值时,比较工作正常(如果我省略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-strings 插入start变量,以及使用 % 运算符格式。start_time与变量进行比较时,错误是相同的。

抱歉,这是我第二次在 SO 上发帖,如果我的问题格式正确,请告诉我。

标签: python-3.xpandaspostgresqldatetimejupyter-notebook

解决方案


推荐阅读