Python: MySQLを試す

今回はPythonからMySQLを扱ってみました。

1. MySQLとは

世界で最も普及している、オープンソースデータベース

MySQL公式より

 

言わずもがな。
当ブログもデータの管理はMySQLです。せっかくMySQLサーバが稼働しているのだから、データベースを作って、Pythonでデータの入出力を実験してみました。

2. データベースの準備

次のとおり、ユーザ、データベース及びテーブルを作っておきます。

ユーザ名pyamazon@localhost
データベース名pyamazon
テーブル名itemList

 

テーブル itemListの構造は次のとおり。
PA-APIで入手した、Amazonの商品データを記録することを想定した構造です。

カラム名オプション(備考)
ASINvarchar(10)primary keyASIN
UpdateDatetimedatetime更新日時
ExpireDatetimedatetime有効期限
Titletext商品名
Artisttextアーティスト
Authortext著者
DetailedPageURLtext商品URL
ImageURLtext画像URL
ImageHeightint画像サイズ(横)
ImageWidthint画像サイズ(縦)
ProductGrouptextグループ
Bindingtextバインディング
Manufacturertextメーカー
ListPriceint定価
Priceint販売価格
FormattedPricetext書式付き販売価格
Discountint割引(%)
AmaResponsetextレスポンス全部(PA-API)

 

データベースを一括設定するために、次のファイルにSQL文を書いておきます。

 

MySQLにrootでログインして、mysqlSetup.sqlを読み込ませれば、ユーザ作成とデータベースが完成。

3. MySQL Connector/Python

MySQL本家によるPythonライブラリです。

MySQL Connector/Python is a standardized database driver for Python platforms and development. Additionally, MySQL Connector/Python 8.0 supports the new X DevAPI for development with MySQL Server 8.0.

Download Connector/Python

pipとかpipenvでインストール

 

MySQL Connector/Pythonの基本的な使い方です。

 

INSERT

ASINがABCDEFGHUJ、Priceが12345である商品データをテーブルに追加(INSERT)してみます。
SQL文をただ投げているだけですね。
なお、テーブルのデータを書き換える場合は、commit()を実行する必要があります。

 

プレースホルダを使って、ただのSQL文からの脱却。

 

辞書と内包表記を使ったら少しはPythonぽくなった。
この書き方ならば、辞書dataの要素が増減しても、それに応じたSQL文が実行されます。

SELECT

テーブルからデータを取り出すSELECTの使い方。
execute()及びfetchall()で、条件に一致するデータ(タプル型)のリストが得られます。
(テーブルitemListには1個のデータしか記録されてないので、リストの長さは1)

fetchall()の代わりにfetchone()で、データを1個1個取り出すことも可能。
(繰り返しますが、今のところテーブルitemListには1個のデータしかない)

データがタプル型なので、何番目の要素がどのカラムの値なのかを気にする必要があります。

 

タプル型の代わりに辞書型でデータを取り出すことも出来ます。
INSERT同様にプレースホルダが使えます。
テーブルのカラム名が辞書のキーに対応するので、わかりやすくて便利です。

DELETE

データの削除(DELETE)の使い方です。

4. まとめ

MySQLへの接続やデータ操作がPythonで実行できました。

execute()を使ってMySQLサーバにSQL文を投げるだけなので、データベースを操作するどんなコマンドでも実行できます。

SQL文をどう組立てるかが工夫のしどころ。プレースホルダと内包表記でSQL文を付く手見たけど、もっとカッコいい書き方があるかも。

 

以上です。

 

Leave a Comment

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください