含FBTEXT列类型时SQLAlchemy查询报错:TypeError问题求助
问题排查与解决
问题根源
你的报错源于Firebird数据库中BLOB SUB_TYPE TEXT类型的字段,在SQLAlchemy映射时使用了错误的字段类型配置,导致框架在转换字符串与字节流时缺少编码指定,触发TypeError: string argument without an encoding。
解决方案
修正字段映射配置
将原来的FBTEXT(1, 'NONE', 'NONE')替换为正确的类型定义,针对Firebird的文本型BLOB,有两种可行方式:
方式1:使用FBLOB指定文本子类型与编码
from sqlalchemy.dialects.firebird import FBLOB, TEXT class Users(Base): __tablename__ = 'users' __table_args__ = ( PrimaryKeyConstraint('userid', name='pk_userid'), ) name = mapped_column(FBLOB(sub_type=TEXT, charset='UTF8')) # 根据实际数据库编码调整charset
方式2:正确配置FBTEXT参数
FBTEXT的参数应指定编码而非无效的'NONE',例如:
from sqlalchemy.dialects.firebird import FBTEXT class Users(Base): __tablename__ = 'users' __table_args__ = ( PrimaryKeyConstraint('userid', name='pk_userid'), ) name = mapped_column(FBTEXT(charset='UTF8')) # 指定数据库对应的字符编码
原理说明
Firebird的BLOB SUB_TYPE TEXT本质是带字符编码的二进制大对象,SQLAlchemy需要明确知晓其编码才能正确完成字符串与字节的双向转换。原配置中的'NONE'编码会导致框架无法确定转换规则,进而抛出编码缺失的错误。指定正确的编码(如UTF8,需与数据库字段实际编码一致)后,框架就能正常处理数据转换。
内容的提问来源于stack exchange,提问作者rubStackOverflow
相关产品推荐
相关产品推荐

