加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何为数组指定psycopg2参数为时间戳(datetimes)

发布时间:2020-12-16 23:07:16 所属栏目:Python 来源:网络整理
导读:我想使用psycopg2在 Python中运行PostgreSQL查询,它使用没有时区的类型为timestamp的列进行过滤.我有一个很长的列表允许的时间戳值(而不是一个范围),psycopg2方便地处理数组,所以我认为这应该工作: SELECT somestuffFROM mytableWHERE thetimestamp = ANY (
我想使用psycopg2在 Python中运行PostgreSQL查询,它使用没有时区的类型为timestamp的列进行过滤.我有一个很长的列表允许的时间戳值(而不是一个范围),psycopg2方便地处理数组,所以我认为这应该工作:
SELECT somestuff
FROM mytable
WHERE thetimestamp = ANY (%(times)s)

times参数是datetime对象的列表.我也试过psycopg2.Timestamp().他们都翻译为WHERE thetimestamp = ANY(ARRAY [‘2009-07-06T00:00:00′,’2009-07-07T00:00:00’,…]),不幸的是,失败并显示以下错误:

operator does not exist: timestamp without time zone = text
LINE 3: WHERE thetimestamp = ANY (ARRAY['2009-07-06T00:00:00','2009-07-07T00:00:00',...]
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

我已经在pgAdmin中证实了这一点,所以不仅仅是psycopg2.似乎发生的事情是,Postgres不会将字符串数组隐式转换成时间戳数组.它会转换一个单一的字符串罚款,如果我明确地添加:: timestamp到pgAdmin中的每个元素,该数组工作正常,但我不知道如何做到这一点在psycopg2.

除了忘记DB-API参数并且手动构建长字符串时间戳之外,执行此操作的最佳方法是什么?有什么办法可以让它投射到正确的类型吗?

解决方法

尝试这样:
SELECT somestuff
FROM mytable
WHERE thetimestamp = ANY (%(times)s::timestamp[])

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读