如何修复使用python psycopg2保存二进制数据时的“无法适应错误”?

4 投票
2 回答
12737 浏览
提问于 2025-04-15 18:33

今天我在我们一个项目里遇到了这个错误,整整碰到三次。把这个问题和解决办法放到网上,以便以后参考。

impost psycopg2

con = connect(...)

def save(long_blob):
     cur = con.cursor() 
     long_data = struct.unpack('<L', long_blob)
     cur.execute('insert into blob_records( blob_data ) values (%s)', [long_data])

这个错误会出现,提示“无法适配”,是来自psycopg2的错误。

2 个回答

1

当 psycopg 不知道你的 long_blob 变量是什么类型时,就会出现“无法适配”的错误。那么这个类型到底是什么呢?

其实你可以很简单地 注册一个适配器,告诉 psycopg 如何把这个值转换成数据库能理解的格式。

因为它是一个数字值,所以很有可能 AsIs 适配器已经可以直接使用了。

4

这个问题是,使用struct.unpack时,它会返回一个元组结果,即使你只解包了一个值。你需要确保从这个元组中取出第一个项目,即使它只有一个项目。否则,psycopg2在解析SQL参数时会失败,因为它试图把元组转换成字符串,这样就会出现“无法适应”的错误信息。

impost psycopg2

con = connect(...)

def save(long_blob):
     cur = con.cursor() 
     long_data = struct.unpack('<L', long_blob)

     # grab the first result of the tuple
     long_data = long_data[0]

     cur.execute('insert into blob_records( blob_data ) values (%s)', [long_data])

撰写回答