zoukankan      html  css  js  c++  java
  • cassandra 存储二进制data

    Blob type 

    The Cassandra blob data type represents a constant hexadecimal number defined as 0[xX](hex)+ where hex is a hexadecimal character, such as [0-9a-fA-F]. For example, 0xcafe. The maximum theoretical size for a blob is 2 GB. The practical limit on blob size, however, is less than 1 MB. A blob type is suitable for storing a small image or short string.

    Blob conversion functions 

    These functions convert the native types into binary data (blob):
    • typeAsBlob(value)
    • blobAsType(value)
    For every native, nonblob data type supported by CQL, the typeAsBlob function takes a argument of that data type and returns it as a blob. Conversely, the blobAsType function takes a 64-bit blob argument and converts it to a value of the specified data type, if possible.

    This example shows how to use bigintAsBlob:

    CREATE TABLE bios ( user_name varchar PRIMARY KEY, 
       bio blob
     );
    
    INSERT INTO bios (user_name, bio) VALUES ('fred', bigintAsBlob(3));
     
    SELECT * FROM bios;
     
     user_name | bio
    -----------+--------------------
          fred | 0x0000000000000003
          

    This example shows how to use blobAsBigInt.

    ALTER TABLE bios ADD id bigint;
    
    INSERT INTO bios (user_name, id) VALUES ('fred', blobAsBigint(0x0000000000000003));
    
    SELECT * FROM bios;
    
     user_name | bio                | id
    -----------+--------------------+----
          fred | 0x0000000000000003 |  3

    官方说了,见 https://datastax.github.io/python-driver/getting_started.html?highlight=blob :

    Type Conversions

    For non-prepared statements, Python types are cast to CQL literals in the following way:

    Python TypeCQL Literal Type
    None NULL
    bool boolean
    float
    float
    double
    int
    long
    int
    bigint
    varint
    smallint
    tinyint
    counter
    decimal.Decimal decimal
    str
    unicode
    ascii
    varchar
    text
    buffer
    bytearray
    blob

    摘自:https://github.com/datastax/python-driver/blob/master/tests/integration/standard/test_types.py

        def test_can_insert_blob_type_as_bytearray(self):
            """
            Tests that blob type in Cassandra maps to bytearray in Python
            """
            s = self.session
    
            s.execute("CREATE TABLE blobbytes (a ascii PRIMARY KEY, b blob)")
    
            params = ['key1', bytearray(b'blob1')]
            s.execute("INSERT INTO blobbytes (a, b) VALUES (%s, %s)", params)
    
            results = s.execute("SELECT * FROM blobbytes")[0]
            for expected, actual in zip(params, results):
                self.assertEqual(expected, actual)

    最后的可以工作的python代码:

    from cassandra.cluster import Cluster
    
    cluster = Cluster(["10.178.209.161"])
    session = cluster.connect('my_keyspace')
    
    s = session
    s.execute("CREATE TABLE blobbytes (a ascii PRIMARY KEY, b blob)")
    params = ['key1', bytearray(b'blob1')]
    s.execute("INSERT INTO blobbytes (a, b) VALUES (%s, %s)", params)
    results = s.execute("SELECT * FROM blobbytes")[0]
    for expected, actual in zip(params, results):
         print (expected, actual)
  • 相关阅读:
    linux c++ 实现http请求
    pip 换源
    Web API接口
    DRF框架知识总览
    jq+bs插件
    element-ui插件
    axios插件
    前端存储数据汇总
    Vuex插件
    全局配置css和js
  • 原文地址:https://www.cnblogs.com/bonelee/p/6515854.html
Copyright © 2011-2022 走看看