python mysqlでinsert文を実行する

python mysqlでinsert文を実行する

pythonで、mysqlでinsert文を実行するサンプルコードを記述してます。pythonのバージョンは3.9.7を使用してます。

環境

  • OS windows 11 Home
  • python 3.9.7

mysql-connector-pythonインストール

ライブラリ「mysql-connector-python」を使用するのでインストールしてない場合は、「pip」を使ってインストールしておきます。

pip install mysql-connector-python

サンプルコード

localhostにある「mysql」に接続して、以下の構成のテーブル「foo」にinsert文を実行してみます。

テーブル「foo」

CREATE TABLE `foo` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

insertを実行します。

import mysql.connector

# 接続情報を記述
conn = mysql.connector.connect(
    host="localhost", port="3306", user="root", password="password"
)

# 接続状況確認
if conn.is_connected():
    try:
        # 再接続を行うように設定
        conn.ping(reconnect=True)
        
        # autocommit禁止
        conn.autocommit = False

        # カーソル作成
        cr = conn.cursor()

        # DB選択
        cr.execute("use hoge;")

        # insertを実行
        cr.execute("INSERT INTO foo (name) VALUES ('name1')")        
        cr.execute("INSERT INTO foo (name) VALUES (%s)", ('nama2',))
        
        # コミットする
        conn.commit()
        
    except mysql.connector.Error as e:
        # ロールバック
        conn.rollback()
        print(e)
        
    finally:
        # クローズ
        cr.close()
        conn.close()
else:

    exit()

実行結果を見ると、データがinsertされていることが確認できます。

executemany

一度に複数件、挿入したい場合は「executemany」を使用します。

import mysql.connector

# 接続情報を記述
conn = mysql.connector.connect(
    host="localhost", port="3306", user="root", password="password"
)

# 接続状況確認
if conn.is_connected():
    try:
        # 再接続を行うように設定
        conn.ping(reconnect=True)
        
        # autocommit禁止
        conn.autocommit = False

        # カーソル作成
        cr = conn.cursor()

        # DB選択
        cr.execute("use hoge;")

        # クエリを作成
        sql = ("""
        INSERT INTO foo 
            (name)
        VALUES 
            (%s)
        """)

        data = [
            ('name1',),
            ('name2',),
            ('name3',)
        ]
        
        # insertを実行
        cr.executemany(sql, data)
        
        # コミットする
        conn.commit()
        
        # 実行結果
        print(f"{cr.rowcount} 件追加しました。")
        
    except mysql.connector.Error as e:
        # ロールバック
        conn.rollback()
        print(e)
        
    finally:
        # クローズ
        cr.close()
        conn.close()
else:

    exit()

実行結果