python-3.x - 在查询中比较 SQL 日期时间对象和 Python 日期时间对象的正确方法是什么?
问题描述
我正在使用 Jupyter Notebooks 并像这样连接了我的 PostreSQL 数据库:
%load_ext sql
from sqlalchemy import create_engine
我正在使用 Pythondatetime
和pytz
库来创建一个时区感知日期时间对象:
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 上发帖,如果我的问题格式正确,请告诉我。
解决方案
推荐阅读
- java - 通过添加 Enum 静态 Holder 进行优化
- php - 如何将视频发送到服务器端处理
- java - DBHelper 类不能在同一个类中实例化(SQLiteOpenHelper 的子类)
- javascript - PHP 自增运算符在公式中返回不正确的结果
- java - Unable to start activity ComponentInfo | E/AndroidRuntime: FATAL EXCEPTION
- javascript - 在 selenium python 中仅选择带有标题标签的 web 元素
- reactjs - 无法显示从烧瓶应用程序端点获取的数据
- ios - 从字符串转换日期
- types - 我如何获取feetype的ID列表,后跟学生ID
- css - 从菜单和链接中删除下划线