当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

Python MySQLデータベース操作その2(更新、トランザクション) mysqlclientモジュール

Python MySQLデータベース操作その2(更新、トランザクション) mysqlclientモジュール


今回はアップデート処理を行いトランザクション処理としてロールバック機能等を入れてみる。ついでにSQLインジェクション対策のパラメータ挿入の仕方で記述します。パラメータの入れ方は多くの人がハマってしまうPython特有のぶら下がりカンマをあえて使います。入れる型に合わせて記述を考慮しなければいけませんがPython独特な書き方だと中々気づきにくいものです。他の言語では複数のリストやarrayを記述する場合は最後のパラメータの後方にはカンマを入れないのですがpythonは必要となるケースがありますのでご注意ください。尚、予め「pip install MySQL-python」or「pip install pymysql」でインストールしてください。mysql driverはpip側のアップデートで名前が変わったりすることもあります。また互換性のあるdriverであれば何でも良いと思いますのでpip searchで調べてみてください。

更新、トランザクション処理を入れたプログラム。SQLインジェクション対策の書き方にもなっている。

更新前と更新後を実行

タグ: , , ,

Python MySQLデータベース操作その1(基本編) mysqlclientモジュール


pythonでMySQLの操作をする場合現在ではmysqlclientモジュールを利用するユーザ数が多いようだ。フレームワークではbottleに限らず使えます。MySQL操作ライブラリーはPyMySQLが多いけど、今回はmysqlclientモジュールを使った場合の基本操作をまとめて行こうと思います。どのライブラリーでも考え方は同じですから改造は簡単だと思います。本テストではカーソルは意図的にcloseしていません。規模が多くなりメモリの再利用が必要な場合は必要かと思いますが通常の小規模では不要なケースのほうが多いと思います。予め「pip install MySQL-python」or「pip install pymysql」をインストールしてください。mysql driverはpip側のアップデートで名前が変わったりすることもあります。また互換性のあるdriverであれば何でも良いと思いますのでpip searchで調べてみてください。

とりあえず、データベースを実験用に2つ用意します。

user_dbデータベース usersテーブル

local_areaデータベース districtテーブル

db_sampleのSQLダウンロード(ZIP形式)

下記の手順で一気にDB作成、テーブル作成、データ挿入までやります。

DB接続情報をyamlファイルで保存

viかnanoエディターでdb.yamlと開いて接続情報を次のような感じで記述保存してください。プログラムに記述しないでDB接続を書いておくとやはり便利です。とくに沢山のDBやテーブルを操作するのであればそうした方が合理的になると思います。ご自分のMySQL環境に合わせてユーザ名やパスワードを書き換えてください。

もし、yamlがインストールされていなかったら「apt-get install libyaml-dev」「yum install python-yaml」「pip3 install pyyaml」とかでインストールできると思います。

fetchoneで一つづつレコードを取り出すやり方で表示する場合

この方式は、データ量が多いときに有利です。1回毎に1レコードを取り出すためバッファの枯渇になることがありません。大規模ならこの方式を使うのが基本です。工夫次第で取得レコードを複数ライン取り出すことも可能でしょう。

実行結果

fetchallで全てバッファに読み込んで表示する場合

メモリ空間が大きい場合は一度にバッファに詰め込んで取り出せるのでパフォーマンス的に有利です。しかしメモリの枯渇が生じる可能性があるので本格的に大規模系で使う場合はレコード数をチェックしてからメモリ容量を予測して不足かどうか判断の上、実行するか判断しないと行けない場合もあります。

実行結果

DB2つを使ってjoinでinner結合して表示する。

実行結果

他のデータベースを使用する場合

21行目の「cons = db_connect(config_db(),’DB1′)」の部分のDB1をDB2にすればDB2から情報を取り出すことが出来ます。あとは全て同じです。

タグ: , , ,