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

スポンサーサイト

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

mongoDB: pythonで触れてみるmongoDB

                
 前回はmongoDBをインストールして、mongoDBでいうところのドキュメントやその使い方を理解するために公式ドキュメントのGettingStartedを基に触ってみた。mongoDBに付属しているシェルを使い、ローカル環境で行った。mongoDBはNoSQLで、サーバクラスタを組んで使うことが考えられているためサーバとして使うのが一般的だと思う。そこで今回はmongoDBを実行しているマシンの外から使うことにする。外からの接続にはPythonのドライバpymongoを使う。

 Cassandraのような設定ファイルの書き換えはとくに必要なくサーバにできる。mongoDBを入れてあるマシンで"mongod"とコマンドを打つ。"mongo"コマンドだとインタラクティブシェルとなり、データベースのステータスを観察できない。
 mongoDBの立ち上げがうまくいくと、どのポートで待ちうけをしているかが表示される。このポート番号は覚えておく。

 続いてネットワークにある別のマシンでPythonを立ち上げ、下記を適宜書き換えて打つ。
import pymongo

host = "192.168.90.130"
port = 27017
client = pymongo.MongoClient(host, port)

db = client.test_database

これでエラーが出なければ接続完了。mongoDBのシェルを見ると、接続を受けいれたというメッセージがIPとともに出る。


 PythonからmongoDBに書き込んだりデータ検索をしてみる。

 まず書き込み。ほかのデータベースではレコードや行にあたるドキュメントだが、形がJavaScriptでいうところのオブジェクトほぼそのまんまというのは前回。で、これってPythonでいうところの辞書型ほぼそのまんま。だからPythonでも扱いが楽。以下がPythonによる適当な書き込みの例。
db.tekitou.insert({"foo1":"value1", "foo2":"value2"})


 mongoDBで使えるいわゆる列の値は、文字列、数値、配列、日付などが用意されている。PythonからPythonで与えられた型のデータを使っても、ドライバがふさわしい型にしてデータベースに保存してくれる。たとえばPythonで日付時間を扱うためのdatetimeオブジェクトで日付時間データを渡して保存してみる。
import datetime
db.foo.insert({"t":datetime.datetime.now()})

 mongoDBを動かしているマシンに行ってデータがどう保存されているか見てみる。ターミナルで以下のように打って、データベース接続とデータ確認を行う。
$ mongo -port:27017
$ use test_database
$ db.foo.find()
14031201.png
時刻がPythonオブジェクトでなくmongoDBでのフォーマットに直して保存されているのでひとまず安心。

 あとはやっぱり配列も値として使えるし、それを検索条件にもできる。検索はfindメソッドで、辞書型で条件を渡してやる。
db.man.insert({"fname":"M","lname":"J","age":30,"sports":["tennis", "soccer", "karate", "golf"]})
db.man.find({"sports":"karate"})


 数値の大小などを使った検索条件を書きたいときはちょっと癖があって、個人的に読みづらいが、以下のように書く。
db.man.find({"age": {"$gt":25}})

">"を"$gt"で、"<"を"$lt"で表す。


 検索には正規表現が使えるし、検索のパフォーマンスを上げるためにインデックスを作ることもできる。mongoDBはもっと深い使い方ができるが、とりあえずはデータ保存方法と検索がわかれば簡単なブログを作れると思う。今回はここまで。


参考
SQLデータベースの用語との対応
PyMongo
Gihyoでのある程度まとまった解説
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

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

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