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

问题描述 投票:2回答:0

我使用的是Jupyter Notebooks,并且像这样连接了我的PostreSQL数据库。

%load_ext sql
from sqlalchemy import create_engine

我使用的是Python的 datetimepytz 库来创建一个时区 意识到的 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

然而,当我检查SQL start_time datatime对象和我创建的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上发帖,请告诉我我的问题格式是否正确。

python-3.x pandas postgresql datetime jupyter-notebook
© www.soinside.com 2019 - 2024. All rights reserved.