在卡桑德拉(Cassandra)中坚持一个邮政编码,然后将其读回



我需要在Cassandra数据库中坚持一个ZIP文件。我需要在另一个程序中将其恢复。为了坚持下去,我正在使用以下代码 -

    bin_data = open("Model-File.zip", 'rb').read()
    bin_data=bin_data.decode('latin-1').encode("utf-8")

这个bin_data我可以以字符串格式持续到卡桑德拉 -

    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不同。

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从dataStax驱动程序中找到测试https://github.com/datastax/datastax/python-driver/blob/master/master/tests/integration/integration/standard/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)

相关内容

最新更新