LoginSignup
6
11

More than 5 years have passed since last update.

DBにアクセスするWebApiをPython+Bottleで実装したらすごく簡単だった

Last updated at Posted at 2018-02-09

試してみた経緯

仕事でMySQLのDBアクセスをODBC経由など直接,クライアントPCから行っているのだが,ODBCのバージョンに依存する場合が多いためそろそろ移行できないかと思った.とりあえずWebAPIを構築して,サーバーに対してURLアクセスすれば,ソケット通信を用意する必要もないし,PythonのスクリプトはApacheに搭載してCGIで処理してしまえばいいやって思った.
開発難度と工数の見積もりをする必要もあったので,勉強のつもりで組んでみた.

結論から言うと,めちゃめちゃ簡単に実装できました.

この記事ので注意事項.

  • Bottleの基本的な使い方、ルーティングは省略します.
  • Pythonで実装する時にURLで引数を渡す等は省略します。
  • 以下のコードはカッコつけてJsonとか使っていますが,戻り値はタプルのリストになります.
  • DBの構成等は省略します.

コード全文

import json
import mysql.connector
from bottle import route, run

@route('/<foo>/<bar>', methods=['GET'])
def GetZone(foo, bar):
    conn = mysql.connector.connect(host="localhost", port=3306, user="root", password="root", database="test")
    cur = conn.cursor()
    query = "SELECT hoge, fuga FROM test_tbl WHERE id='%s' AND user='%s' AND num IS NULL" % ( foo, bar)
    print(query)
    cur.execute(query)
    result = cur.fetchall()
    cur.close()
    conn.close()
    return json.dumps(result)

run(host="0.0.0.0", port=8080, debug=True, reloader=True)

あとは以下で実行.

$ Python test.py

URLにアクセスすると,Resultを返してくれる.

http://localhost:8080/0001/user

まとめ

最初はFlaskで組んでましたが,どの解説記事みてもFlaskにアレモコレモって全部やらせようとしてるのが多かった.
また,思った以上に依存関係になるのかな?エラー吐いたりすること多く,戸惑ったためBottleに変更.
自分はBottleでWebを組んでたりするので,その場合はそのままBottleのライブラリをインポートして使ったほうがいいかなと思ったのと,標準ライブラリをメインに使用していくことでネットに転がっている小規模な情報パズルで大きくならず,コード量も少なく構築することができた.
URLでセットしたい値を渡す実装も,例にしているサイトはだいたいが引数1つの場合が多いのだが,2つ以上引数がある場合はコレで対処可能ってことも覚えた.

6
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11