こつこつCGIサーバー
とあるDBの中身をブラウザ上に適当に表示などしたいと思った。
Pythonでやれば、簡単に出来るんじゃないかと適当にやってみた。
環境
- Python
- 2.5.1
- sqlObject
- MySQLdb
- DB
- MySQL5.0.23
[python] やり方?
djangoで作れれば簡単ポインだが、既に存在するテーブルをモデル化する方法が分からないのと、適当にやってみて壊してしまったら怖いので今回はパス。
sqlobjectで、DBにアクセスしてデータを持ってくる事にする。スクリプトを、手で叩くのではなく、ブラウザでアクセスが有った際にデータを取得したいので、CGIHTTPServerを使うことにした。
>cgiserver.py
# coding:utf8 import CGIHTTPServer CGIHTTPServer.test()
簡単すぎる! 3行でOK
cgiserver.pyと同じディレクトリにcgi-binというフォルダを作成し、pyファイルを作成した。
>dbone.py
#! /usr/bin/env python # coding:utf-8 import cgi from datetime import datetime from DBmngETestHeader import * html_body = u""" <html><head> <meta http-eqiv="content-type" content="text/html";charset=utf-8"> </head> <body> <a href='./DBone.py/?query=1'>一覧</a><br> <hr> <h1>%s</h1> <hr> <a href='/'>もどりっ!</a><p> %s </body> """ content = '' form=cgi.FieldStorage() query_str=form.getvalue('query','') if not query_str.isdigit(): title=u'一覧 取得失敗<p>' else: title=u'一覧になりまする<p>' for i in getAnswererIdInfo(): #print i content += "%s : %s <br>"%(i[0], i[1]) #print "Content-type: text/html;charset=utf-8\n" print (html_body%(title,content)).encode('utf-8')
>DBctrl.py
#! /usr/bin/env python # coding:utf-8 from DBmngETestHeader import * blockinfo = [[1, 20], [21, 25], [41, 60], [61, 80], [81, 100] ] # 全員を取得する。 def getBlockAns(blockID): """ >>> getBlockAns(1) [{1:[1,...]}...] """ "ブロックを調査" qidinfo = blockinfo[blockID] return_hash = {} "求めたqid、からbtnid、ansidを求める" for p in range(1,10): one_arr = [] for q in range(qidinfo[0], qidinfo[1]+1): r = StudioAns.selectBy(qid = q, btnid=p) r = list(r) r = str(r) r = r.split("ansidID=") one_arr.append(int(r[1][:-3])) return_hash[p] = one_arr print return_hash
これとは別に、DBアクセス用のヘッダーファイルがある。
とりあえづ、これで動くは動くがsqlobjectの使い方がいまいちよく分からない。
2万レコードほど有る中から、1000個ほど取り出すのに1.4秒くらい掛かってる
そんなにかかるもんなのか?0.2秒くらいになって欲しい。