3267214 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.11
2023.10
2023.09
2023.08
2023.07

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2008.04.19
XML
カテゴリ:IronPython
『IronPythonの世界』を読む (7) からの続き。Part 4 はとりあえず適当に流して、Part 5 IronPython で DB & Web プログラミングに入る。ここでは、SQL Server 2005 を使っている。


IronPythonの世界

具体的に書かれているのは、ADO.NET を使って SQL Server 2005 に接続するやり方だけで、SQLite や MySQL 等を使うにはどうしたらいいかとかいうのはない。

p.304 に 「CPython のデータベース接続を使う」というページがあって、FePy プロジェクトIronPythonでADO.NET パート1IronPythonでADO.NET パート2 のリンクがあげられている。このあたりを参考にすれば、なんとかなるんだろうということで、後から試してようかと思う。DB 接続の部分は、できれば DBAPI 互換のライブラリを使って、CPython のプログラムと共通化したい。

IronPython を使うと、.NET の世界とは仲良くなれる反面、既存の Python の資産を有効に扱いづらいというデメリットもある。基本的にはマルチプラットフォームのものが好きなので、うーむと読み進めるにしたがって思ってしまうのだが、Windows に閉じた世界でやる分には、まあ、便利でよろしいかなと。例えば、IronPython から MS の日本語固有ニーズに対応したライブラリを使う 「プログラミング言語 Python を使う みたいなこともできるし、自然言語処理関連のライブラリ SlothLib をちょこっと使う にしても、 『IronPython の世界』を読む (4) で IronPython から使ってみているけど、CPython + ctypes で C のライブラリを使うよりも、IronPython + .NET のライブラリを使う方が楽なわけで、欲しいライブラリが .NET で書かれていれば、やっぱり IronPython を使うメリットは大きいとも思う。ちょっとアンビバレント。

とりあえずは、SQL Server 2005 を使って書かれているとおりにやってみる。ということで、また一つ、一時的に Microsoft に洗脳されてあげることにする。

書籍には、URL が書かれているが打ち込むのが面倒なので、SQL Server 2005 - ダウンロード のリンクからダウンロードするのがよいだろう。SQL Server 2005 Express Edition with Advanced Services Service Pack。これは SP2 があたっているので、書籍に書かれているように別途 SP2をあてる必要がない。

Advanced を使っている理由は、

  • SQL Server 2005 Management Studio Express (SSMSE) という使いやすいグラフィック管理ツールによる SQL Server Express の容易な管理。
  • SQL Server テーブルのプレーン文字ベースのデータに対するフルテキスト クエリの実行。フルテキスト クエリには、語、句、または複数の形式の語句を含めることができます。
  • ローカル リレーショナル データでの SQL Server Reporting Services レポートの実行。

ということで、インストールするときに SSMSE のインストールオプションを忘れずにということだ。デフォルトだとインストールされないから。確かにこれはインストールしておいた方が便利だろう。SSME のテンプレートエクスプローラーとかも密かに便利ね。テンプレートの中から Backup Database を使えばテンプレートをほいと作ってくれるとか。なんだかんだで、こういう GUI はオープンソース系よりプロプライエタリなやつの方が充実している。SQL Server Management Studio でテンプレートを使用する方法、 SQL Server 2005の管理ツール (@IT)集中連載 : SQL Server 2005 と Oracle 10g の真実 第 7 回 メンテナンス プランの作成 ~ 定期的なメンテナンス作業の簡単なセットアップとバックアップ、復元。それにしても、3年前のリリースのものだと資料がたくさん簡単に見つかる。

そういえば、この数年 MS SQL Server って使ってなかったというのはさておき、サンプルデータベースは、Northwind and pubs Sample Databases for SQL Server 2000SQL Server 2005 Samples and Sample Databasesここに移動)で、Express Editions 用サンプル データベースのインストール のあたり。

とりあえず書籍のNorthwind and pubs Sample Databases for SQL Server 2000を使ってテストする。instpubs.sql と instnwnd.sql を実行してサンプルデータベースを作るが、このあたりの手順、書籍ではちゃんとされているので、SQL Server を使ったことがない人でもたぶん大丈夫だと思う。ADO.NET の仕組みなんかも簡単に説明されている。それゆえ、また洗脳が行われるw

とりあえず、データベースを作成後、書籍を参考に、下のようなテストをしてみる。接続は Windows 統合認証ではなく SQL Server 認証を使った。User ID=sa;Pwd=password のところが Windows 統合認証なら Integrated Security=true になる。このあたりは、Python のお話というより、通常の SQL Server の接続文字列のお話になるが。

# お約束で clr をインポートして、
# AddReference で参照してから、import
import clr
clr.AddReference("System.Data")
from System.Data.SqlClient import *

# SQL Server への接続
conn = SqlConnection()
conn.ConnectionString = "Server=(local)\sqlexpress;Database=pubs;User ID=sa;Pwd=password"
conn.Open()

# コマンドの作成と実行
cmd = conn.CreateCommand()
cmd.CommandText = "select count(*) from titles"
count = cmd.ExecuteScalar()
print count

cmd.CommandText = "select title, type from titles"
dr = cmd.ExecuteReader()
while dr.Read():
print "title=%s type=%s" % (dr[0], dr[1])
dr.Close()

cmd.CommandText = "insert into titles values ('ironbk', 'Programming IronPython',
'programming', '0736', 2800, 0, null, null, null, '2007/3/31')"
count = cmd.ExecuteNonQuery()
print count

# 接続を閉じる
conn.Close()

参考: 『IronPython の世界』


p. 294 に次のような記述がある。

本書では、セキュリティ上の観点から「Windows統合認証」で解説していきます。それは、仮とはいえ、パスワードは気軽に公開できるものではないと思うからです。

なので、上記の ConnectionString のところは、サンプルでは、conn.ConnectionString = "server=(localhost):Database=pubs;Integrated Security=true" になっている。

セキュリティ上の観点から言うと、スクリプトにパスワードを書きこまなくても済む Windows統合認証というのは、特に企業内でアプリケーションを多数に配る場合に便利かつ安全で良いかもしれない。そうでなければ、毎回、使用時にパスワードを訪ねる必要がある。Windows であれば、そんな必要はない。これは大きなメリットだ。

と、また、マイクロソフトに毒されてみるw シングルサインオンですぜと。でも、本当にそれは正しい面もある。

毎回パスワード入力するなら、OpenLDAP を使って python-ldap を使うとかあり得るが、それじゃあなんだから Kerberos でというのなら、PyGSS: Python bindings for the GSS-API とか。

あるいは、ウェブアプリケーションなら Lasso - Liberty Alliance Single Sign On あたりもそのうち見てみるか。 PKIとPMIを融合する新しいXMLベースのセキュリティメカニズム【連載】WebサービスのセキュリティSaaS市場でもSIビジネスが成長か サイオス、Google Apps導入でSIサービス開始SIOS Integration for Google Apps とは、という方向だってあるだろう。

でも、とりあえず、そういうことはどうでもいいや。


なかのひと






お気に入りの記事を「いいね!」で応援しよう

Last updated  2008.04.19 07:58:55
コメント(0) | コメントを書く
[IronPython] カテゴリの最新記事



© Rakuten Group, Inc.