我需要在cassandra数据库中保存一个zip文件。我需要在另一个程序中恢复它。为了坚持它,我使用以下代码 -
bin_data = open("Model-File.zip", 'rb').read()
bin_data=bin_data.decode('latin-1').encode("utf-8")
这个bin_data我可以用字符串格式保存到cassandra -
CQLString = "INSERT INTO testkeyspacenew.model (modelid, data)
VALUES(%s,%s)"
session.execute(CQLString, (model_id,bin_data))
然而,在阅读它时,我无法以开头的格式获取bin_data。因此无法重新创建zip文件。请帮忙。 这是我在阅读时尝试的 -
abc=session.execute(CQLString)
for row in abc:
data=row
data=str(data)
print (data.encode("utf-8").encode('latin-1'))
我在阅读时打印的数据与我从zip文件中获取的bin_data不同。
答案 0 :(得分:3)
Cassandra和CQL知道blob
类型,这可能是你想要的。请参阅:https://docs.datastax.com/en/archived/cassandra/1.2/cassandra/tools/use_about_data_types_c.html
您正在使用bin_data=bin_data.decode('latin-1').encode("utf-8")
对二进制数据进行转码,这根本不是必需的。
在顶部print (data.encode("utf-8").encode('latin-1'))
显示两个encode
来电。
编辑:使用blob
https://github.com/datastax/python-driver/blob/master/tests/integration/standard/test_types.py
s.execute("CREATE TABLE blobbytes2 (a ascii PRIMARY KEY, b blob)")
params = ['key1', bytearray(b'blob1')]
s.execute("INSERT INTO blobbytes2 (a, b) VALUES (%s, %s)", params)