如何在数据库记录中追加pickle格式的numpy数组
解决数据库中追加Pickle格式Numpy数组的问题
要实现追加而非替换,需要先读取旧数据、拼接新数组后再写入,具体步骤如下:
第一步:查询并反序列化旧数组
从数据库中取出目标记录已有的array_data字段,用pickle.loads反序列化为numpy数组。如果是首次写入(旧数据为空),直接使用新数组即可。第二步:拼接新旧数组
因为是逐列接收的图像,用numpy的hstack(或concatenate指定axis=1)横向拼接新旧数组,模拟逐列追加的效果。第三步:序列化并更新数据库
将拼接后的数组重新用pickle.dumps序列化,再执行UPDATE语句写入数据库。
完整代码示例:
import numpy as np import pickle # 查询旧数据 db.cursor.execute("SELECT array_data FROM captures WHERE id=%s", (self.target_id,)) old_data = db.cursor.fetchone() if old_data and old_data[0]: # 反序列化旧数组 old_arr = pickle.loads(old_data[0]) # 横向拼接新旧数组(对应逐列追加图像) combined_arr = np.hstack((old_arr, arr1)) else: # 无旧数据时直接使用新数组 combined_arr = arr1 # 更新数据库 db.cursor.execute("UPDATE captures SET array_data=%s WHERE id=%s", (pickle.dumps(combined_arr), self.target_id)) db.conn.commit()
注意事项:
- 确保已导入numpy和pickle库
- 如果是三维图像数组(含通道维度),需根据实际结构调整拼接的
axis参数 - 若
array_data字段允许为空,必须做好空值判断,避免反序列化报错
内容的提问来源于stack exchange,提问作者md.119
相关产品推荐
相关产品推荐

