Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何修复”;can';t适应错误“;使用python psycopg2保存二进制数据时_Python_Postgresql_Psycopg2_Unpack_Iterable Unpacking - Fatal编程技术网

“如何修复”;can';t适应错误“;使用python psycopg2保存二进制数据时

“如何修复”;can';t适应错误“;使用python psycopg2保存二进制数据时,python,postgresql,psycopg2,unpack,iterable-unpacking,Python,Postgresql,Psycopg2,Unpack,Iterable Unpacking,今天在我们的一个项目中,我三次碰到这个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_

今天在我们的一个项目中,我三次碰到这个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])
import psycopg2
con=连接(…)
def保存(长\u blob):
cur=con.cursor()

long_data=struct.unpack(“问题是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])
import psycopg2
con=连接(…)
def保存(长\u blob):
cur=con.cursor()
当psycopg不知道您的
long\u blob
变量的类型时,将引发long\u data=struct.unpack(“”无法调整)。它是什么类型的

您可以轻松地告诉psycopg如何转换数据库的值


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

在本例中,我的类型是一个二进制字符串,但包含在struct.unpack返回的元组中。类似('0x001122')的内容而不是“0x001122”本身。我想我们可以制作一个元组提取器,但现在这只是记录我们的错误。谢谢你的回答。