PythonでDBにアクセス

データベース(DB)にアクセスするプログラムをPythonで作ってみた。
藤沢周平の作品(文庫本で読める作品全て)名をデータベース化したものを用意した。目的は

  • 文庫本毎にはどんな作品が収録されているか
  • 作品カテゴリー(江戸市井もの、海坂藩もの、等)による分類
  • 作品の初出情報

である。使ったDB管理プログラムはSQlite。結果を表示する等のグラフィックユーザフェースはwxpythonを使った。

以下は使用時の画面表示の一部である:

初期画面
初期画面
初出分類
初出分類
作品の初出
作品の初出

ボロノイ図を描く(1)

ボロノイ分割を描画するPythonプログラムを考える。

平面のボロノイ分割は三角形をなす任意の三点(母点という)を円周上に持つ円(唯一である)の中心(ボロノイ頂点という)と半径を決めることである。このボロノイ頂点から三角形の各辺の中点を結ぶとボロノイ辺ができる。このボロノイ辺が三つの母点の勢力圏を分割する分割線となる。今回はこの作業をPythonプログラムとして作った。

使ったツールは

パイソン:Python 3.6.4

描画ツール:matplotlib、 inkscape

一例を示す:

ボロノイ図
ボロノイ図

PythonAnywhereを使ってみる

表題にあるPythonAnywhereは手元のコンピュータにPythonインタプリタをインストールしなくともWEB上にあるPythonインタプリタを使ってPythonプログラムを実行し結果をWEBブラウザーに表示するサービスをしている。

このサービスの使い方はここにある。

今回は日本語を含むプログラムを実行した。使ったプログラムは以下のようなものである:

#coding: utf-8
d = { ‘甲’:(‘コウ’,’きのえ’),
‘乙’:(‘オツ’,’きのと’),
‘丙’:(‘ヘイ’,’ひのえ’),
‘丁’:(‘テイ’,’ひのと’),
‘戊’:(‘ボ’,’つちのえ’)}
for key, value in d.items():
print(key, value)

結果の表示は

となり日本語の処理適切にされている。

インストールなしてPythonが使える点は貴重なサービスである。

 

Pythonプログラムの実行(2)

前回の例は簡単すぎてプログラムという印象が少ないと思ったので今回は「繰り返し」を含む問題である。

九九の表を表示する問題。

プログラムは以下のようになる:

#!/usr/local/bin/python
# -*- coding: euc-jp -*-

print “Content-Type: text/html; charset = EUC-JP \n”

print “九九の表 <br>\n”
for i in range(1,10):
    for j in range(1,10):
        print(“%d x %d = %02d ” % (i,j,i*j))
    print “<br>\n”

最初の三行はWEB上でPythonを実行し結果を表示させるためにある。それら以降が本来のPythonプログラム。結果をWEB上で表示させるために改行や空白の処理に工夫がいる。

実行

Pythonプログラムの実行

Pythonプログラムは一般的には手元にあるコンピュータにPythonインタプリタをインストールして使う。

しかしこのWEBサーバには既にPythonを実行できる環境があるのでこの環境を使って簡単なプログラムを走らせてみる。このような手法をCGIと呼ぶ。CGIの説明

注意点

(1)このサーバにインストールされているPythonは

ヴァージョン:2.75

場所:/usr/local/bin/python

(2)このサーバはFreeBSD(Linuxの一種)で動いているのでそのシステムに合ったテキストファイルを作成する必要がある。具体的には、

文字コード:EUC-JP

改行コード:LF

(3)ファイルの拡張子はcgiにする。

そのファイルの属性は705、このファイルを入れるホルダーの属性は755とする。

(4)試したプログラムは

#!/usr/local/bin/python
# -*- coding: euc-jp -*-

print “Content-Type: text/html; charset = EUC-JP \n”
print “Pythonから今日は”

最後の1行がPython固有のprint文である。

(5)出力結果は

実行