使用自定义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
相关产品推荐
相关产品推荐

