mysql_connector_python - Python

  • 作成日:
  • 最終更新日:2025/06/25

インストール

公式の MySQL コネクタライブラリで、Oracle が提供しています。

pip install mysql-connector-python

以下は、基本的な使用例です。

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="your_database",
    collation='utf8mb4_general_ci'
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)
conn.close()

MariaDB で接続しようとすると以下のエラーが発生しました。

mysql.connector.errors.DatabaseError: 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'

mysql.connector.errors.DatabaseError: 1273 (HY000): 不明な照合順序: 'utf8mb4_0900_ai_ci'

collationを MariaDB と同じものを指定すると解決する可能性があります。

メソッド

is_connected()で接続できているかどうか確認できます。戻り値は boolean です

print(conn.is_connected())

execute()は、1つの SQL クエリを実行するためのメソッドです。

  • execute():実行する

複数の処理には、executemany()を使います。

fetchall()は、SQLクエリの実行結果からすべての行を取得し、リスト形式で返すメソッドです。

select, insert, update, delete

select

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="your_database",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()
cursor.execute("SELECT * FROM users")

for row in cursor.fetchall():
    print(row)

conn.close()

insert

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="pythonapp",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()

cursor.execute("INSERT INTO users (name, age) VALUES ('Jon', 24)")

# データベースに変更を確定
conn.commit()

cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)

# カーソルを明示的に解放
cursor.close()

# データベースの接続を切断する
conn.close()

update

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="pythonapp",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()

cursor.execute("UPDATE users SET name = 'Alis', age = 10 WHERE id = 1")

# データベースに変更を確定
conn.commit()

cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)

# カーソルを明示的に解放
cursor.close()

# データベースの接続を切断する
conn.close() 

delete

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="pythonapp",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()

cursor.execute("DELETE FROM users WHERE id = 1")

# データベースに変更を確定
conn.commit()

cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
    print(row)

# カーソルを明示的に解放
cursor.close()

# データベースの接続を切断する
conn.close() 

プレースホルダーとプリペアドステートメント

mysql-connector-pythonは、名前付きプレースホルダー(:name のような形式)はサポートされていません。

プレースホルダーの形式は%sのみがサポートされています。

以下は、プレースホルダーを使った例です。

# データ取得のクエリ
import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="pythonapp",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()

select_query = "SELECT * FROM users WHERE id = %s"

cursor.execute(select_query, (8,))

print(cursor.fetchone())

conn.close() 

名前付きプレースホルダーのような使い方をしたい場合は、dict を使って値を管理する方法があります。

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="pythonapp",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()

data = {"name": "Bob", "age": 25}
sql = "INSERT INTO users (name, age) VALUES (%(name)s, %(age)s)"

cursor.execute(sql, data)
conn.commit()

print(f"{cursor.rowcount} record inserted.")

conn.close()

以下は、プリペアドステートメントを使った例です。

import mysql.connector

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="pythonapp",
    collation='utf8mb4_general_ci'
)

cursor = conn.cursor()

cursor = conn.cursor(prepared=True)

stmt = "SELECT * FROM users WHERE id = ?"

cursor.execute(stmt, (8,))

print(cursor.fetchone())

conn.close()

オブジェクトとして取得

SQLの結果を「カラム名をキーにした辞書(オブジェクト)」として取得するには、MySQLCursorDictをつかいます。

C拡張用の辞書カーソルか、もしくは、純正Python版ドライバで接続する2通りの方法があります。

C拡張用の辞書カーソルを使う

from flask import render_template, request, redirect
import mysql.connector
from mysql.connector.cursor_cext import CMySQLCursorDict

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="sample",
    collation='utf8mb4_general_ci'
)

class MyappController:
    def index(self):
        # ホーム画面のためのロジック
        cursor = conn.cursor(cursor_class=CMySQLCursorDict)
        cursor.execute("SELECT * FROM users")
        users = cursor.fetchall()
        print(users)
        conn.close()
       
        return render_template('myapp/index.html', users=users)

純正Python版ドライバで接続

from flask import render_template, request, redirect
import mysql.connector
from mysql.connector.cursor import MySQLCursorDict

conn = mysql.connector.connect(
    host="localhost",
    user="root",
    password="password",
    database="sample",
    collation='utf8mb4_general_ci',
    use_pure=True
)

class MyappController:
    def index(self):
        # ホーム画面のためのロジック
        cursor = conn.cursor(cursor_class=MySQLCursorDict)
        cursor.execute("SELECT * FROM users")
        users = cursor.fetchall()
        print(users)
        conn.close()
       
        return render_template('myapp/index.html', users=users)