You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在psycopg2的SQL查询中正确传入datetime类型参数?

正确用Python datetime筛选PostgreSQL rental表数据

你之前的错误是把Python的datetime.datetime()直接硬写到SQL语句里了,PostgreSQL根本不认识这个语法,会把datetime当成数据库里的schema,所以才报"schema 'datetime' does not exist"。

psycopg2本身支持自动转换Python的datetime类型到PostgreSQL的timestamp类型,正确做法是用参数绑定,既安全还能自动处理类型转换,代码如下:

import psycopg2 as pg
from datetime import datetime

# 建立数据库连接
conn = pg.connect(host='localhost', port='5432', dbname='dvdrental', user='postgres', password='123')
cur = conn.cursor()

# 定义要筛选的目标时间
target_rental_date = datetime(2005, 5, 24, 22, 54, 33)

# 使用%s作为参数占位符,把datetime值通过元组传递给execute方法
cur.execute("SELECT * FROM rental WHERE rental_date = %s", (target_rental_date,))

# 获取并处理查询结果
results = cur.fetchall()
for record in results:
    print(record)

# 记得关闭游标和连接
cur.close()
conn.close()

关键注意点:

  • 用%s作为psycopg2的参数占位符(这不是Python的字符串格式化符号,是psycopg2专门的语法)
  • 参数必须以元组形式传入,哪怕只有一个参数,也要加逗号写成(target_rental_date,),不然会被当成单个值而非可迭代对象
  • 不需要手动把datetime转成字符串格式,psycopg2会自动完成Python datetime到PostgreSQL timestamp的类型映射
  • 这种参数绑定方式能避免SQL注入,比直接拼接SQL字符串安全得多

内容的提问来源于stack exchange,提问作者Waster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:09:23