初めに
前回Flaskを拡張して少し使いやすいようにしてみました。
Flaskをベースにフレームワーク作ってみた
今回は前回作ったフレームワークに簡単なクエリビルダ機能を追加しました。
まだ、結合とか複雑なSQLが対応できていないことやpostgresでしか使用できないことなど問題はありますが、紹介していこうと思います。
作ったもの
ソースコードはGitHubで公開しておりますので、ご自由に使用していただければと思います。
取得
下記のコードで該当抽出条件に従ってSQLが生成されます
書き方
# サンプル
with start_transaction() as tx:
query_builder = create_query_builder(tx)
client = query_builder.table('{テーブル名}').where('{フィールド名}', '=', 2).or_where('{フィールド名2}', '=', 3).select()
# 全項目を取得する必要がない時はselectの引数に与えれば必要分だけの取得になります
client = query_builder.table('{テーブル名}').where('{フィールド名}', '=', 2).or_where('{フィールド名2}', '=', 3).select('{フィールド名3}',{フィールド名4})
生成されるSQL
SELECT * FROM {テーブル名} WHERE {フィールド名} = %s OR {フィールド名2} = %s;
AND条件としたいときはwhereを続けて使用すればAND条件となります
登録
登録内容に従ってINSERT文を発行します。
書き方
with start_transaction(False) as tx:
query_builder = create_query_builder(tx)
query_builder.table('{テーブル名}').insert({'{フィールド名}': 6, '{フィールド名2}': 'test'})
生成されるSQL文
INSERT INTO {テーブル名} ({フィールド名}, {フィールド名2}) VALUES (%s, %s);
更新
更新内容に従って更新処理を行います。
書き方
with start_transaction(False) as tx:
query_builder = create_query_builder(tx)
query_builder.table('{テーブル名}').where('{フィールド名}', '=', 6).update({'{フィールド名2}': 'test2'})
生成されるSQL文
UPDATE {テーブル名} SET {フィールド名2} = %s WHERE {フィールド名}= %s;
削除
下記の内容に従って削除処理を行います。
書き方
with start_transaction(False) as tx:
query_builder = create_query_builder(tx)
query_builder.table('{テーブル名}').where('{フィールド名}', '=', 6).delete()
生成されるSQL文
DELETE FROM {テーブル名} WHERE {フィールド名}= %s;
終わりに
PHPであることから抵抗感を示す人は多いもののLaravelのフレームワークはよくできていると思っていてPythonにもLaravelの使用感で使えるものがあるといいなと思っているため、Laravelで実現されている機能はどんどん追加していきたいなと思っています。
今回作ったクエリビルダは急造なのでバグもあるでしょうし、結合に未対応であることから、機能の拡張は必要だと思うもののこのくらいのことが実現できれば実は事足りていて結合や複雑なSQLへの対応は直にSQLを書いたほうが見やすいのでは?という思いもあるのでこのまま進めていきバグは改修するもののそんなに機能拡張は積極的にはしていかないかもなとも思っております。