4

我今天在我们的一个项目中遇到了这个错误三次。将问题和解决方案放到网上以供将来参考。

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 的错误“无法适应”。

4

2 回答 2

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])
于 2010-01-27T18:53:41.850 回答
1

long_blob当 psycopg 不知道变量的类型时,会引发“无法适应” 。它是什么类型的?

您可以轻松地注册一个适配器来告诉 psycopg 如何转换数据库的值。

因为它是一个数值,所以AsIs适配器很可能已经为您工作了。

于 2010-02-16T10:40:24.937 回答