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

スポンサーサイト

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

IronPython: MongoDBを使う

                
 Pythonの.NET Framework開発であるIronPython。pystoneで計測するとCPythonを超えるパフォーマンスを出したりしながらも、.NET Frameworkで用意されたAPIを利用できるので、GUIアプリなどを即席で作ったりするのにけっこう使える。今回はMongoDBをIronPythonからいじってみる。


 CPythonで動かしていたアプリケーションをIronPythonに移そうとしたら、エラーが出て動かなかった。原因はMongoDBに接続するために使っていたPythonモジュールのPyMongo。調べてみるとPyMongoはIronPythonに対応していない。ここで出てくる選択肢は自分で開発するか諦めるか。しかしIronPythonならもう一つの手が出てくる、C#や.NET Framework向けに開発されたドライバ使えばいいじゃない。というわけでIronPythonからMongoDBに接続するためのドライバとしてC# Driverを使う。

 C#コードを参考に、IronPythonでドキュメント(RDBでいうところのレコード)の挿入、検索、削除をやってみる。
http://www.codeproject.com/Articles/273145/Using-MongoDB-with-the-Official-Csharp-Driver
不明瞭なところは公式ドキュメントを参考にしながら。
http://api.mongodb.org/csharp/current/

 ドライバのZIPを落として解凍し、Pythonコードと同じディレクトリにMongoDB.Driver.dllとMongoDB.Bson.dllを置いて、以下のようにコードを書けばMongoDBに接続できる(もちろんMongoDBを立ち上げた状態で)。
import clr
clr.AddReference("MongoDB.Bson")
clr.AddReference("MongoDB.Driver")

import MongoDB.Bson
import MongoDB.Driver


 ここでコーディングを容易にするため、補完機能を使う準備をする(しなくてもいい)。コーディングに使うIDEはSharpDevelop 4.4。Pythonプロジェクトを作成して、プロジェクトウィンドウの参照設定にMongoDB.Driver.dllとMongoDB.Bson.dllを追加。MongoDB.Driver.xmlとMongoDB.Bson.xmlも同じディレクトリにコピーしておく。これで補完機能が効くようになる。
1407021654079.png


 改めて下記のコードを。
import clr
clr.AddReference("MongoDB.Bson")
clr.AddReference("MongoDB.Driver")

import MongoDB.Bson
import MongoDB.Driver

これはDLLファイルへの参照を行ったあとで、その機能が使えるようにするためPythonのいつもどおりのimportを行っている。

 続いてデータベースへの接続をする。MongoDBをローカルで、ポートも初期設定で動かしていれば、とくにパラメータを渡すことなく接続できる。
client = MongoDB.Driver.MongoClient()
server = client.GetServer()
db = server.GetDatabase("test")
collection = db.GetCollection("foos")


 挿入をする。今回用意したC# Driverではドキュメントを、.NET Frameworkのディクショナリで表している。これはIronPythonで用意されているディクショナリを使ってもOK。なのでPythonの辞書型でドキュメントとして保存するデータを書く。
# insertion
for p in xrange(10):
foo = MongoDB.Bson.BsonDocument({"x":p, "y":p})
#foo = MongoDB.Bson.BsonDocument()
#foo["x"] = p
#foo["y"] = p
collection.Insert(foo)


 検索をする。QueryDocumentを使って条件を指定できる。
# no filter query
q = MongoDB.Driver.QueryDocument()
cols = collection.Find(q)
for col in cols:
print "no filter", col

# y==0
q.Add("y", 0)
cols = collection.Find(q)
for col in cols:
print "y==0", col

# y!=0
q = MongoDB.Driver.QueryDocument()
q.Add(MongoDB.Driver.Builders.Query.NE("y", 0))
cols = collection.Find(q)
for col in cols:
print "y!=0", col


 削除する。
collection.RemoveAll()
print collection.Count()


 C#のコードから型指定などを省けば、C#ドライバとして用意されていたものがほぼそのまま使える。
http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/#getting-started-with-csharp-driver

 というわけでPythonのサードパーティモジュールが使えないような場合においても、C#向け、あるいは.NET Framework向けとされるライブラリを探して使えば抱えていた問題が解決される。意外と使えてしまうIronPython。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

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

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