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

如何用两个psycopg3 Range对象创建MultiRange?

解决psycopg3中拼接Range为MultiRange的问题

psycopg3的Range对象不可迭代,这就是你用itertools.chain时触发TypeError: 'Range' object is not iterable的原因——chain需要处理可迭代的元素集合,但Range仅表示一个连续范围区间,不支持迭代操作。

下面是两种正确创建包含多个Range的MultiRange的方法:

方法一:通过列表直接初始化MultiRange

直接将多个Range对象放入列表,传给MultiRange的构造函数:

from psycopg.types.range import Range, MultiRange

t = Range(300, 400)
newrange = Range(2900, 4300)

# 用Range列表初始化MultiRange
multi_range = MultiRange([t, newrange])
print(multi_range)  # 输出:[300,400), [2900,4300)

方法二:创建空MultiRange后逐个append

先初始化空的MultiRange,再用append()方法添加单个Range对象:

from psycopg.types.range import Range, MultiRange

t = Range(300, 400)
newrange = Range(2900, 4300)

multi_range = MultiRange()
multi_range.append(t)
multi_range.append(newrange)
print(multi_range)

补充说明

psycopg3的Range设计用于表示数据库中的范围类型,它支持in操作符检查元素是否在范围内,但本身并不是离散元素的集合,因此不能像列表那样被迭代。MultiRange是专门用来管理多个Range的容器,直接使用它的构造函数或append方法才是正确的拼接方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:13:17