Python: MySQL へ接続するモジュール mysqlclient(MySQLdb)の使い方

MySQL へ接続するモジュール mysqlclient を使うには、インポートの際に MySQLdb と記述する必要がある。
エンジニア速報は Twitter の@commteで配信しています。
mysqlclient のインストール
MySQL と mysqlclient をインストールする。
brew install mysql
pip install mysqlclient
mysqlclient のインポート
import MySQLdb
インポートしたときに ModuleNotFoundError エラーが出る場合は、インポートしたときに「ModuleNotFoundError」になる場合の対処法を参考にするとよい。
Python DB API のバージョンを確認する
インポートが正しく動いたら、データベースのモジュールが PEP 249 に準拠しているか調べておこう。
Python の扱うデータベース API は、PEP 249によって、API 仕様の統一がされている。
apilevel
データベースのモジュールが、PEP 249 に準拠しているか調べたい場合、apilevel を使う。apilevel は、サポートされているデータベース API レベルを示す文字列定数である。現在、文字列「1.0」と「2.0」のみが許可されている。
import MySQLdb
print(MySQLdb.apilevel)
# 2.0
2.0 と表示された。DB API 2.0 に準拠している。
データベース作成
次に、データベースを作る。sample というデータベースを作成してみよう。mysql をたたいた後で、create database を入れる。
mysql
create database sample;
データベースに接続しテーブルを作る
基本的なメソッドは次のとおり。データベースを使うには connect 関数で接続する必要がある。
MySQLdb.connect(パラメータ)
connect 関数の引数
引数名 | 説明 | 省略可能 |
---|---|---|
user | ユーザー名 | 可 |
passwd | パスワード | 可 |
host | ホスト名 | 可 |
charset | 言語指定 | 可 |
port | ポート | 可 |
db | データベース名 | 不可 |
代表的なカーソルオブジェクトのメソッド
cursor() はカーソルオブジェクトを返す。カーソルはクエリを実行し、その結果を調べるのに使われる。
カーソルとは
データベースにおけるカーソル(Cursor)は、一連のデータに順にアクセスする際の検索条件および「現在位置」を保持するデータ要素である。 カーソル (データベース) - Wikipedia
execute("SQL 文") で SQL を実行する。
メソッド | 処理 |
---|---|
cursor() | カーソルオブジェクトを返す |
execute() | テーブル作成、データ作成、情報表示 |
conn.commit() | SQL 命令文を実行後にデータベースへの変更を行う |
close() | カーソルをクローズする |
fetchall() | 全ての行をシーケンスとして取り出す |
with 文
データベースのモジュールを扱うときは、コンテキストマネージャー(with 文の前後で処理を実行する)の with を合わせて使うのがよい。なぜなら、動作が完了するとファイルが確実に閉じられるからである。
※ 次のコードのconnectの中にある user、passwd、host のリテラルは、あえて空白にしている。ダブルクォーテーションに見えるがシングルクォーテーションである。
"""MySQL モジュール
create database sample;
"""
import MySQLdb
# MySQL実行処理 データベースに接続
with MySQLdb.connect(
user='',
passwd='',
host='',
db='sample',
charset='utf8'
) as conn:
# cursor() はカーソルオブジェクトを返す
# カーソルを取得
with conn.cursor() as cur:
# execute("SQL文") は、SQL実行
# テーブル初期化
cur.execute("DROP TABLE IF EXISTS person")
# テーブルを作る
cur.execute("""CREATE TABLE person
(id integer,
name text)
""")
# Insert実行
cur.execute("""INSERT INTO person
(id, name) VALUES (1, 'user1')
""")
# 情報を引き出す
cur.execute('SELECT * FROM person')
# print(cur.fetchall())
# もしくは
for i in cur:
print(i)
上述したコードの流れを日本語化するとこのようになる。
1. connect() でデータベース sample に接続
2. cursor() でカーソルを取得する
1. テーブルを初期化
2. テーブル作成
3. Insert 実行
4. 情報表示
for 文のところは、print(cur.fetchall())
でもよい。次は、複数のデータを挿入したケースである。
"""MySQL モジュール
create database sample;
"""
import MySQLdb
with MySQLdb.connect(
user='',
passwd='',
host='',
db='sample',
charset='utf8'
) as conn:
# カーソルを取得
with conn.cursor() as cur:
# テーブル初期化
cur.execute("DROP TABLE IF EXISTS blog")
# テーブルを作る
cur.execute("""CREATE TABLE blog(
id int,
title varchar(100),
body text,
created datetime
)""")
# データの追加
cur.execute("INSERT INTO blog VALUES(1, 'a', 'b', '2021-01-01')")
cur.execute("INSERT INTO blog VALUES(2, 'c', 'd', '2021-01-01')")
cur.execute("INSERT INTO blog VALUES(3, 'e', 'f', '2021-01-01')")
# 一覧表示
cur.execute("SELECT * FROM blog")
print(cur.fetchall())
SQL 文の「DROP TABLE IF EXISTS」は、指定した名前のテーブルが存在する場合はテーブルを削除し、存在しない場合はテーブルをスキップするという意味である。
Python おすすめ本
スポンサード リンク
関連記事
- Python : 再帰は大きな問題が小さな問題に収束するように使う
- Python: f-string(f 文字列)と「:」の便利な使い方
- Python: bytes 型 と str 型の違い。変換方法
- Python: インポートしたときに「ModuleNotFoundError」になる場合の対処法
- Python: カウンタ。Counter()関数で要素数を計算する
- Python: Requests-HTML の使い方
- Python: BeautifulSoup 使い方(タイトル・HTML 取得など)
- Python: Requests モジュールの使い方(スクレイピング、データ収集など)
- Python: SQL の基本コマンドと sqlite3 モジュール
- Python: JSON とは何か?(loads、dumps など)
Leave a Comment