XAMPPでPythonを動作させるメモ
Pythonをインストールした際のメモ。
参考サイト
メモ
- ざっと見たところ、まだバージョン3は広く使われていないように思ったので、今回はバージョン2(2.7.6)をインストールした。
- 今回のインストール先はWindows7の64ビット版だけど、Pythonの64ビット版は一般的に使われるモジュールが64ビットに対応していなかったり…があるらしいので、32ビット版をインストールした。
- CGIプログラムとして実行するために、
httpd.conf
のAddHandler
に.py
を追加した。
データベースを使う
PythonからMySQLを使ってみる。MySQLに接続するためのドライバはたくさんあるけど、定番(のように思う)の MySQL for Python を使ってみる。
MySQL-python-1.2.4b4.win32-py2.7.exe
をダウンロードして実行するだけでインストールされる。以下はMySQLへの接続例。
#!/python/python
# coding: UTF-8
import MySQLdb
con = MySQLdb.connect(host='127.0.0.1', db='dbname', user='username', passwd='password', charset='utf8')
cur = con.cursor(MySQLdb.cursors.DictCursor)
cur.execute('SET NAMES utf8')
print 'Content-Type: text/html'
print ''
print '<!DOCTYPE html>'
print '<html>'
print '<head>'
print '<meta charset="utf-8" />'
print '<title>MySQL</title>'
print '</head>'
print '<body>'
cur.execute('SELECT id, name FROM members LIMIT 10')
result = cur.fetchall()
for row in result:
print '<hr />'
print 'id=' + str(row['id'])
print 'name=' + str(row['name'].encode('UTF-8'))
cur.close()
con.close()
print '</body>'
print '</html>'
localhost
で接続しようとするとCan't connect to MySQL server on 'localhost'
のエラーになった。IPアドレスなら接続できた。MySQLdb.cursors.DictCursor
を指定することにより、ディクショナリ形式で値を取得できる。
フレームワークを使う
1ファイルで構成されている軽量フレームワーク、Bottleを使ってみる。
Bottleをダウンロードすると含まれている bottle.py
を適当な場所にコピーする。
同じ場所に hello.py
を作成し、以下のコードを記述する。
from bottle import route, run
@route('/hello')
def hello():
return 'Hello World!'
run(host='localhost', port=8080, debug=True)
コマンドプロンプトから python hello.py
と入力すると、8080
でサーバーが起動する。ブラウザソフトから http://localhost:8080/hello
にアクセスし、Hello World!
と表示されれば成功。
CGIとして動作させる場合、以下のように記述する。
#!/python/python
# coding: UTF-8
import bottle
from bottle import route, run
@route('/hello')
def hello():
return 'Hello World!'
run(server=bottle.CGIServer)
ブラウザソフトから hello.py/hello
にアクセスし、Hello World!
と表示されれば成功。この方法なら、ロリポサーバーなどでも手軽に使える予感。
MySQLを扱う場合、Bottle-MySQLプラグインを使用する。(プラグイン内部では、前述の MySQL for Python が呼び出されている。)
bottle.py
と同じ場所に bottle_mysql.py
を配置すれば、以下のコードでMySQLに接続できる。
#!/python/python
# coding: UTF-8
import bottle
import bottle_mysql
from bottle import route, run
mysql_plugin = bottle_mysql.Plugin(dbhost='127.0.0.1', dbuser='root', dbpass='1234', dbname='test')
bottle.install(mysql_plugin)
@route('/')
def show(db):
db.execute('SELECT id, name FROM members LIMIT 10')
result = db.fetchall()
view = ''
for row in result:
view += '<hr />'
view += 'id=' + str(row['id'])
view += 'name=' + str(row['name'].encode('UTF-8'))
return view
run(server=bottle.CGIServer)