我碰到这个bug今天三次跑在我们的项目之一。把问题和解决方案的在线供将来参考。

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。

有帮助吗?

解决方案

问题是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])

其他提示

“无法适应”的时候psycopg不知道你long_blob变量的类型提高。什么类型是什么?

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

由于它是一个数值,有机会,所述 ASIS 适配器应该已经为你的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top