Python3からMySQLに接続する

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をインストールする

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()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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