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

使用自定义PostgreSQL schema时出现asyncpg DatatypeMismatchError

解决SQLAlchemy+asyncpg自定义schema下ENUM类型不匹配问题

错误原因很明确:PostgreSQL里自定义schema(这里是test)下的ENUM类型需要带schema前缀引用,但你当前的ENUM定义没有指定schema,导致插入数据时SQLAlchemy使用的是无schema的applicationsource类型,和数据库中实际存在的test.applicationsource不匹配。

直接给两种解决方式,按需选择:

1. 在模型的Column定义中给ENUM指定schema

修改PanAcquisition模型里的acquisition_source字段,在ENUM构造时加上schema="test"参数:

class PanAcquisition(Base):
    __tablename__ = "pan_acquisition"

    acquisition_id = Column(Integer, primary_key=True)
    time_started = Column(
        DateTime(timezone=True), server_default=func.now(), nullable=False, index=True
    )
    last_access = Column(
        DateTime(timezone=True), server_default=func.now(), nullable=False, index=True
    )

    acquisition_source = Column(
        ENUM(ApplicationSource, schema="test"), nullable=False, index=True
    )

2. 定义ENUM类型时直接指定schema

如果你的ApplicationSource是通过SQLAlchemy的Enum类直接创建的,也可以在定义时就加上schema参数:

from sqlalchemy import Enum

# 直接指定schema为test
ApplicationSource = Enum(
    "SOURCE_A", 
    "SOURCE_B", 
    name="applicationsource", 
    schema="test"
)

这样修改后,SQLAlchemy生成的SQL语句会正确引用test.applicationsource这个带schema的枚举类型,和数据库中的类型一致,就能解决类型不匹配的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:40:18