5

問題

シリアル化されたオブジェクト (cPickle を使用) を Cassandra 1.2 列に保存しようとしています。Python cql ライブラリを使用しています。列をテキスト (utf8 文字列) と blob として定義しようとしましたが、どちらの場合も同じエラーが発生します。

オブジェクトは Python dict です。

obj = {'id':'sometextid',
       'time_created':05/12/2013, #<---- datetime
       'some other string property': 'some other value'
}

エラーは次のとおりです。

raise cql.ProgrammingError("Bad Request: %s" % ire.why)
cql.apivalues.ProgrammingError: Bad Request: line 31:36 no viable alternative at character '\'

実行された CQL ステートメントを見ると、オブジェクトをピクルした後に「\」文字がいくつか表示されます。たとえば、次のようになります。

漬物の一部

cdatetime
datetime
p4
(S'\x07\xdd\x03\x1c\x000\x13\x05\xd0<'
tRp5

私の質問

cqlライブラリを使用して、python dict(日時を含む)をシリアライズしてcassandra 1.2に保存する通常の方法は何ですか? これを行うためのより良い、またはより簡単な方法はありますか?

前もって感謝します!

4

2 に答える 2

1

文字列を適切に解析する CQL ライブラリに問題があるようです。それが修正されるまで、structを使用して pickle をパックされた文字列に変換する 1 つの方法があります。

または、 urllibなどを使用して、問題のある値のエンコーディングを変更することもできます。

于 2013-10-01T14:17:26.640 に答える