我有一个大的python dict,可能是10MB,未能将它保存在mysqldb中,作为repr(dict) 我试过zlib.compress,结果字符串生病了以保存mysql。 现在如何压缩dict并转换为二进制,并保存为blob?任何编码样本?
#UPDATE 我尝试使用zlib进行结构化,对于200k字符长度的字符串减少约50% 测试:
import zlib, struct, ast
dic={}
for i in xrange(20):
dic[str(i)]=i
s=zlib.compress(repr(dic), 5)
bs=struct.pack('%ds' %len(s),s)
s2=struct.unpack('%ds' %len(s),bs)[0]
s2=zlib.decompress(s2)
dic2=ast.literal_eval(s2)
assert dic2==dic
答案 0 :(得分:0)
您应该能够将python字典保存为BLOB字段,但必须使用参数化查询like this。
如果你的blob大于1MB,你可能必须在服务器和客户端上增加max_allowed_packet
以使BLOB工作。
但是,更好的方法是将字典插入另一个表,每个键一行。您可能需要创建新表,或者可能需要使用一些仅为此目的而创建的现有表。
如果新表被正确编入索引,您可以利用服务器能够通过密钥快速检索数据。
答案 1 :(得分:0)
如果您想稍后使用dict,那么我建议以json格式保存dict,然后可以将其导回。
尝试mvps suggestion首先增加max_allowed_packet
。
import json
dicstring = json.dumps(dic) # outputs as a string format
# or
dicobj = json.dumps(dic).encode('utf-8') # outputs in bytes format
# alternatively, to save the file
with open('path/to/file.json', 'wb+') as file:
file.write(dicobj)
file.close()
打开文件:
with open('path/to/file.json','rb') as file:
dic = json.loads(file.read().decode('utf-8'))
file.close()
读取字符串:
dic = json.loads(dicstring)