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

如何在Peewee中处理PostgreSQL的point几何类型?

处理PostgreSQL point类型的peewee模型问题

pwiz自动生成的模型会将PostgreSQL的point列识别为UnknownField,导致无法正常读写,解决方法如下:

1. 自定义PointField字段类

实现一个适配PostgreSQL point类型的peewee字段,处理数据库与Python对象的转换:

from peewee import Field

class PointField(Field):
    db_field = 'point'

    def db_value(self, value):
        if value is None:
            return None
        # 将Python tuple转换为PostgreSQL point格式字符串
        return f'({value[0]}, {value[1]})'

    def python_value(self, value):
        if value is None:
            return None
        # 将数据库返回的point字符串解析为tuple
        coords = value.strip('()').split(',')
        return (float(coords[0].strip()), float(coords[1].strip()))

如果使用psycopg2,还可以注册适配器让tuple直接适配point类型(可选):

from psycopg2.extensions import register_adapter, AsIs

def adapt_point(point):
    return AsIs(f'POINT({point[0]} {point[1]})')
register_adapter(tuple, adapt_point)

2. 替换模型中的UnknownField

把生成代码里的UnknownField()替换为自定义的PointField:

# 原代码
# column_name = UnknownField()  # point

# 修改后
column_name = PointField(null=True)  # 根据实际表结构设置null属性

3. 验证读写功能

  • 读取数据时,该字段会返回(x坐标, y坐标)格式的tuple
  • 写入数据时,直接传入tuple(如(10.5, 20.3))即可自动转换为point类型存入数据库

内容的提问来源于stack exchange,提问作者Mr. Clear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:52:11