如何压缩python dict以保存到mysql中

时间:2013-01-09 06:13:07

标签: python mysql dictionary blob

我有一个大的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

2 个答案:

答案 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)