MySQL Connector/Pythonの使い方を紹介する。
環境
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ python3 --version
Python 3.6.8
利用可能なMySQL Connector/Pythonoのバージョン
公式サイトのMySQL :: MySQL Connector/Python Developer Guide :: 3 Connector/Python Versionsを参照。
現行バージョンのMySQL Connector/Python 8.0は次のバージョンに対応している。
- MySQL Server Versions
- 8.0
- 5.7
- 5.6
- 5.5
- Python Versions
- 3.9
- 3.8
- 3.7
- 3.6
- (2.7 and 3.5 before 8.0.24)
MySQL Connector/Pythonをインストールする
pip install mysql-connector-python
MySQLに接続する
connect()コンストラクターは、MySQLサーバーへの接続を作成し、MySQLConnectionオブジェクトを返す。
import mysql.connector
USER='scott'
PASSWORD='password'
HOST='localhost'
DATABASE='employees'
cnx = mysql.connector.connect(
user=USER,
password=PASSWORD,
host=HOST,
database=DATABASE
)
cnx.close()
接続エラーを処理には、mysql.connector.Error例外をキャッチする。
import mysql.connector
USER='scott'
PASSWORD='password'
HOST='localhost'
DATABASE='employees'
try:
cnx = mysql.connector.connect(
user=USER,
password=PASSWORD,
host=HOST,
database=DATABASE
)
except mysql.connector.Error as err:
print(err)
else:
cnx.close()
テーブルを作成する
cursor()メソッドを使用して、カーソルオブジェクトを作成し、
カーソルオブジェクトのexecute()メソッドを使用してCREATE TABLE文を実行し、テーブルを作成する。
import mysql.connector
USER='scott'
PASSWORD='password'
HOST='localhost'
DATABASE='employees'
def create_table(cursor):
SQL = (
'CREATE TABLE IF NOT EXISTS animals ('
' id MEDIUMINT NOT NULL AUTO_INCREMENT,'
' name CHAR(30) NOT NULL,'
' PRIMARY KEY (id)'
');'
)
cursor.execute(SQL)
try:
cnx = mysql.connector.connect(
user=USER,
password=PASSWORD,
host=HOST,
database=DATABASE,
)
cursor = cnx.cursor()
create_table(cursor)
except mysql.connector.Error as err:
print(err)
else:
cnx.close()
データを追加する
カーソルオブジェクトのexecute()メソッドを使用してデータを登録し、
commit()メソッドを使用してコミットする。
失敗したときはrollback()メソッドを使用してロールバックする。
import mysql.connector
USER='scott'
PASSWORD='password'
HOST='localhost'
DATABASE='employees'
def create_table(cursor):
SQL = (
'CREATE TABLE IF NOT EXISTS animals ('
' id MEDIUMINT NOT NULL AUTO_INCREMENT,'
' name CHAR(30) NOT NULL,'
' PRIMARY KEY (id)'
');'
)
cursor.execute(SQL)
def insert(cursor):
cursor.execute('INSERT INTO animals (name) VALUES (%s)', ('cat',))
cursor.execute('INSERT INTO animals (name) VALUES (%(name)s)', {'name':'dog'})
try:
cnx = mysql.connector.connect(
user=USER,
password=PASSWORD,
host=HOST,
database=DATABASE,
)
cursor = cnx.cursor()
create_table(cursor)
insert(cursor)
cnx.commit()
cursor.close()
except mysql.connector.Error as err:
print(err)
else:
cnx.close()
データを取得する
カーソルオブジェクトのexecute()メソッドを使用してSELECT文を実行する。
カーソルオブジェクトをイテレータとして使用し、結果セットの各行を取得する。
import mysql.connector
USER='scott'
PASSWORD='password'
HOST='localhost'
DATABASE='employees'
def select(cursor):
cursor.execute('SELECT id,name FROM animals LIMIT %s', (3,))
for (id, name) in cursor:
print("id:{} name:{}".format(id, name))
try:
cnx = mysql.connector.connect(
user=USER,
password=PASSWORD,
host=HOST,
database=DATABASE,
)
cursor = cnx.cursor()
select(cursor)
cursor.close()
except mysql.connector.Error as err:
print(err)
else:
cnx.close()