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

能否将SQLAlchemy的ARRAY列映射为Python元组?

如何在SQLAlchemy中将ARRAY列映射为不可变对象(如元组)

当然可以将SQLAlchemy的ARRAY列映射为元组这类不可变Python对象,主要有两种实现方式:

1. 自定义类型转换器(推荐)

通过TypeDecorator包装原生ARRAY类型,实现数据库值与Python元组的双向转换:

from sqlalchemy import TypeDecorator, ARRAY, Text
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class ImmutableArray(TypeDecorator):
    # 底层使用原生ARRAY类型
    impl = ARRAY(Text)

    def process_result_value(self, value, dialect):
        # 从数据库读取时,将列表转为元组
        return tuple(value) if value is not None else ()

    def process_bind_param(self, value, dialect):
        # 写入数据库时,将元组转为列表(适配数据库ARRAY格式)
        return list(value) if value is not None else []

然后在模型中使用这个自定义类型,默认值设为空元组:

class YourModel(Base):
    __tablename__ = "your_table"
    id = Column(Integer, primary_key=True)
    tags = Column(ImmutableArray(dimensions=1), default=())

2. 仅设置默认值为元组(局限性)

如果只需要默认值是元组,但不要求从数据库读取时自动转为元组,可以直接设置default=():

tags = Column(ARRAY(Text, dimensions=1), default=())

但这种方式下,从数据库读取的结果依然是列表,只有默认值是元组,因此更推荐第一种自定义类型的方案,能全程保证数据的不可变性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:02:05