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

使用Python Scrapy框架向PostgreSQL插入日期失败求助

解决psycopg2.DataError: invalid input syntax for type timestamp with time zone问题

这个问题我之前也碰到过,原因很明确:PostgreSQL的timestamp with time zone类型要求的是完整的日期时间格式(比如2024-05-20 16:40:30),但你现在只传了时分秒(16:40:30),数据库没法把这个字符串解析成带时区的时间戳,所以抛出了DataError。

这里有两种可靠的解决方法:

方法1:直接传递Python datetime对象(推荐)

psycopg2原生支持Python的datetime类型,不需要手动转成字符串,它会自动帮你处理类型转换,既避免格式错误,又更高效。修改后的代码如下:

from datetime import datetime

# 你的Scrapy pipeline代码片段
if spider.name == 'indianexpress':
    self.cur.execute(
        "insert into feed_indianexpress(headline,link,date) values(%s,%s,%s)",
        (item['headline'], item['link'], datetime.now())
    )
    self.connection.commit()

方法2:生成完整的日期时间字符串

如果你坚持要手动格式化字符串,需要包含日期+时间的完整格式,比如%Y-%m-%d %H:%M:%S,这样PostgreSQL才能正确解析:

from datetime import datetime

# 你的Scrapy pipeline代码片段
if spider.name == 'indianexpress':
    self.cur.execute(
        "insert into feed_indianexpress(headline,link,date) values(%s,%s,%s)",
        (item['headline'], item['link'], datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    )
    self.connection.commit()

额外提示

如果你的date字段实际上只需要存储时间(不需要日期),那可以考虑把PostgreSQL字段类型改成time,这样传%H:%M:%S格式的字符串就没问题了,但从字段名date来看,应该还是存储完整时间戳更合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:00:35