固定バイナリの使用

BINARY文を使用して、固定バイナリ・フィールドを宣言できます。この場合、フィールドのサイズもバイトで指定する必要があります。その後、base64でエンコードされたバッファを使用して、フィールド値を読み書きします。ただし、バッファが指定したサイズと同じではない場合、フィールドに書き込む際にIllegalArgumentExceptionがスローされます。

ラージ・バイナリ・オブジェクトを格納する場合には、バイナリ・フィールドではなくLOB APIを使用する必要があります。

すべてのフィールド値が同じサイズである場合、バイナリ・データ型より優先して固定バイナリを使用する必要があります。固定バイナリは、配列のサイズを格納しておく必要がないため、コンパクトなストレージ形式です。バイナリ・データ型の情報は、バイナリの使用を参照してください。

主キーがUIDで2番目のフィールドに固定バイナリ・フィールドを持つシンプルな2つのフィールドの表を定義するには、次のDDL文を使用します。

CREATE TABLE myTable (
    uid INTEGER,
    myFixedByteArray BINARY(10),
    PRIMARY KEY (uid)
) 

バイナリ値では、DEFAULTおよびNOT NULL制約はサポートされていません。

バイト配列に書き込むには、次のようにします。

    b64buffer = store.encode_base_64('1234567890')
     
    row_d = {'uid' : 0,
             'myFixedByteArray' : b64buffer
            }
    try:
        store.put("myTable", row_d)
        logging.debug("Store write succeeded.")
    except IllegalArgumentException, iae:
        logging.error("Could not write table.")
        logging.error(iae.message)
        sys.exit(-1) 

固定バイナリ・フィールドを読み込むにはStore.decode_base_64()を使用します。

    try:
        primary_key_d = {"uid" : 0}
        row = store.get("myTable", primary_key_d)
        if not row:
            logging.debug("Row retrieval failed")
        else:
            logging.debug("Row retrieval succeeded.")
            b64buffer = row['myFixedByteArray']
            print store.decode_base_64(b64buffer)
    except IllegalArgumentException, iae:
        logging.error("Row retrieval failed.")
        logging.error(iae.message)
        return
    except KeyError, ke:
        logging.error("Row display failed. Bad key: %s" % ke.message)