如何在Django模型中整体存储大尺寸浮点矩阵并保存至SQLite
Django矩阵整体存储解决方案
以下是两种无需拆分矩阵、可直接整体存储浮点型矩阵的可行方案,均适配SQLite数据库:
方案1:使用内置JSONField(优先推荐,适配Django 3.1及以上版本)
Django 3.1及以上版本内置的JSONField原生支持嵌套列表、浮点型数据的自动序列化/反序列化,无需额外处理就能直接存储整个矩阵。
修改models.py
from django.db import models class Cell(models.Model): content = models.JSONField()
修改views.py
不需要对矩阵做打平、转置操作,直接将整个二维列表存入字段即可:
from .models import Cell new_file = [[8.2, 14.2, -6.1], [12.6,7.0,4.7], [-1.1,3.6,21.1]] def file_list(request): # 直接传递完整矩阵即可,不需要额外处理 extract_data = Cell(content = new_file) extract_data.save()
读取使用
从数据库中查询到记录后,直接访问content属性就能得到原始的嵌套浮点列表,可直接用于数值计算:
cell = Cell.objects.first() mat = cell.content # 输出就是[[8.2, 14.2, -6.1], [12.6,7.0,4.7], [-1.1,3.6,21.1]]
方案2:TextField + 手动JSON序列化(适配Django 3.1以下版本)
如果使用的Django版本低于3.1没有内置JSONField,可以手动将矩阵序列化为JSON字符串存入TextField,读取时再反序列化即可。
修改models.py
from django.db import models class Cell(models.Model): content = models.TextField()
存储逻辑
import json from .models import Cell new_file = [[8.2, 14.2, -6.1], [12.6,7.0,4.7], [-1.1,3.6,21.1]] def file_list(request): # 手动序列化为JSON字符串 content_str = json.dumps(new_file) extract_data = Cell(content = content_str) extract_data.save()
读取逻辑
import json cell = Cell.objects.first() mat = json.loads(cell.content) # 得到原始嵌套浮点列表
补充说明
- 千级元素的矩阵大小远低于SQLite单条记录的存储上限,两种方案都不会出现容量问题
- 如果后续需要做矩阵运算,读取后直接转换为numpy数组即可:
import numpy as np; np_mat = np.array(mat) - 不建议使用pickle序列化存储,存在反序列化安全风险,JSON方案兼容性和安全性更高
内容的提问来源于stack exchange,提问作者AN_
相关产品推荐
相关产品推荐

