我今天在其中一个项目中遇到过这个错误三次。将问题和解决方案放在网上以供将来参考。
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中的“无法适应”错误。
答案 0 :(得分: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])
答案 1 :(得分:1)
long_blob
变量的类型时,会引发“无法适应”。它是什么类型的?
您可以轻松register an adapter告诉psycopg如何转换数据库的值。
因为它是一个数值,所以AsIs适配器可能已经适合你。