主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Cassandra: Pythonで触ってみる

                
 Cassandraの接続を前回までに行った。今回はPythonでCassandraのデータをいじってみる。おおよそやることはcassandra-driverのGettingStartedに書いてあることをなぞってみる。
http://elicon.blog57.fc2.com/blog-entry-342.html


 前提としてCassandraの公式ページにあるGettingStartedでcqlshを使ってmykeyspaceに三件のデータ書き込みが済んでいる状態で。

 まず接続を行う。
from cassandra.cluster import Cluster

host = "192.168.190.134"
keyspace = "mykeyspace"

cluster = Cluster([host])
session = cluster.connect(keyspace)


 検索をかけてデータを取り出してみる。
rows = session.execute("SELECT * FROM users")
for user in rows:
print user.user_id, user.fname, user.lname

executeメソッドに引数としてクエリとなる文字列を渡せば、クエリに応じた操作がそのまま行われる。下記のように書けばキースペースの指定を行う。
session.execute("USE mykeyspace2")


 クエリ内での文字列は、任意の文字をシングルクオートで囲うことで表現される。
ダブルクオートでの代替はできない。
○ SELECT * FROM users WHERE lname='smith'
× SELECT * FROM users WHERE lname="smith"
文字列中にシングルクオートを使いたければ重ねる
SELECT * FROM users WHERE lname='That''s good'
rows = session.execute("SELECT * FROM users WHERE lname='smith'")
for user in rows:
print user.user_id, user.fname, user.lname


プレースホルダは下記のように。
rows = session.execute("SELECT * FROM users WHERE lname=%s", ("smith",))

ここで気になってくるのがexecuteとプレースホルダを悪用したインジェクション。CQLではワンラインでいくつものCQL文を実行することができず、一度のCQL実行につき一文のみしか実行されないとのことでこのインジェクションの心配はない。ただドライバの実装がまずかったりすればあるかもしれないけどまだないと。実際に下記のようにやってみてもエラーで実行できない。
session.execute("SELECT * FROM users;SELECT * FROM users WHERE lname='smith'")
Re: CQL injection attacks?

あとはプレースホルダを使ったりしてクエリを繰り返すなら、prepareステートメントを使った方が効率的になるとのこと。始めたばかりでこのあたりはまだいい使いかたができないので、コードは書かないでおく。


まとめ
 Cassandraが動作しているサーバとのセッションが確立した後でexecuteメソッドを使ってCassandraデータベースをいじることができた。executeはクエリ文をそのまま実行するものでインジェクションが少し不安に思ったが、CQLは一度に一文じか実行できないというルールがあるので使い方を間違えなければ使用できるもののようだ。ここからはCQL3の公式ドキュメントを参考に理解を深めていく。

参考
http://cassandra.apache.org/doc/cql3/CQL.html
python-driver
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。