tl;dr こんなテーブルがあったとする 実装例 環境 1 件取得する 全件を取得する 指定した条件のレコードを取得 以上 tl;dr SELECT * FROM table WHERE id = N の結果を JSON で取得したい. ただ, それだけ. こんなテーブルがあったとする mysql> SELECT * FROM us...

inokara.hateblo.jp

この記事で作ったサンプルとかを Github に上げた.

mysql-query-result-export-json - MySQL のクエリ結果を JSON で出力するサンプル

github.com

詳細は前回の記事とか見る.

実装メモ

テスト

ローカルホストに MySQL が動いていることが前提だけど, テスト用のデータを突っ込んで, 結果が JSON で返ってくることを確認するテストを書いてみた.

テストの実行は後述の invoke を利用.

$ invoke test
.....
----------------------------------------------------------------------
Ran 5 tests in 0.100s

OK

本来であれば, mock を使うべきなのかもしれないけど, mock は次の機会に取っておこう.

テストの最初と最後だけ実行したい関数がある場合, 以下のように書くということを知った. (単純な setUp や tearDown だと, テストケース毎に呼ばれるので注意.)

...

    @classmethod
    def setUpClass(self):
        before = Before()
        before.prepare_db()
        before.insert_data()

    @classmethod
    def tearDownClass(self):
        after = After()
        after.drop_db()

...

pycodestyle

コードスタイルをチェックするようにした.

$ pycodestyle --first *.py tests/*.py
$ echo $?
0

コードスタイル (PEP8) に準拠していないようなコードがあった場合には, 以下のように出力される.

$ invoke check
tasks.py:11:1: E302 expected 2 blank lines, found 1

invoke

make や rake っぽいものが欲しいなと思っていたら invoke というモジュールがあるので使ってみた.

invoke - Pythonic task management & command execution.

github.com

以下のようにタスクを書くだけ. 簡単に使える.

from invoke import run, task


@task
def test(context):
    try:
        run("python -m unittest tests.test_sample")
    except Exception:
        pass

@task
def check(context):
    try:
        run("pycodestyle --first *.py tests/*.py")
    except Exception:
        pass

以上

テストで mock を使ってみたい.

元記事はこちら

MySQL のクエリ結果を JSON で取得したい Python 編 (2)