重要 現在この問題に対処している場合は、datastax の新しい cassandra-driver (つまり、cassandra のインポート) を使用してください。これは、この一般的な問題のほとんどを解決し、古い cql ドライバーはもう使用しないためです。この質問は、新しいドライバーが開発される前の古いものであり、cql と呼ばれる不完全な古いライブラリを使用する必要がありました (インポート cql <- これはもう使用しないで、新しいドライバーに移動してください)。
はじめに Python ライブラリcql を使用して、Cassandra 1.2 データベースにアクセスしています。データベースにはタイムスタンプ列を持つテーブルがあり、Python コードには列に挿入する日時があります。例は次のとおりです。
テーブル
CREATE TABLE test (
id text PRIMARY KEY,
last_sent timestamp
);
コード
import cql
import datetime
...
cql_statement = "update test set last_sent = :last_sent where id =:id"
rename_dict = {}
rename_dict['id'] = 'someid'
rename_dict['last_sent'] = datetime.datetime.now()
cursor.execute (cql_statement, rename_dict)
問題
コードを実行すると、実際に実行された cql ステートメントは次のようになります。
update test set last_sent =2013-05-13 15:12:51 where id = 'someid'
その後、エラーで失敗します
Bad Request: line 1:XX missing EOF at '-05'
問題は、クエリを実行する前に、cql ライブラリが日時をエスケープ ('') または変換していないことです。
質問 日付を手動でエスケープせずにこれを行う正しい方法は何ですか?より正確な完全なタイムスタンプを cassandra タイムスタンプ列に格納できますか?
前もって感謝します!