「Python」executemanyメソッドでMySQLに複数件データを挿入するサンプル

環境
Python 3.9.13
Windows 11 Pro 21H2 64bit
MySQL 8.0.30

1.ライブラリmysql-connector-pythonをインストールします

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install mysql-connector-python
pip install mysql-connector-python
pip install mysql-connector-python

2.テーブル「usertbl」を作成します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
CREATE TABLE `usertbl` (
`userid` int NOT NULL AUTO_INCREMENT,
`addr` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
CREATE TABLE `usertbl` ( `userid` int NOT NULL AUTO_INCREMENT, `addr` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
CREATE TABLE `usertbl` (
  `userid` int NOT NULL AUTO_INCREMENT,
  `addr` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

説明
列名userid
AUTO_INCREMENT データを追加した時にカラムに対して現在格納されている最大の数値に1 を追加します。
PRIMARY KEY プライマリーキー(主キー)

3.executeメソッドについて
executemanyメソッドは共にCursorオブジェクトのメソッド
execute() -> データベースへの指令(SQL文やコマンド)を実行します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
引数: operation(SQL文,コマンド), params=None(dictかtuple, operationの引数になるもの), multi=Flase
multi -> operationで指定される複数のSQL文を個別に実行できるようにし、かつイテレータを返します。
引数: operation(SQL文,コマンド), params=None(dictかtuple, operationの引数になるもの), multi=Flase multi -> operationで指定される複数のSQL文を個別に実行できるようにし、かつイテレータを返します。
引数: operation(SQL文,コマンド), params=None(dictかtuple, operationの引数になるもの), multi=Flase
multi -> operationで指定される複数のSQL文を個別に実行できるようにし、かつイテレータを返します。

使用例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import mysql.connector
# DB接続情報  ユーザー名 パスワード名
conn = mysql.connector.connect(
host="localhost", port="3306", user="root", password="#123456@"
)
# DB接続状況確認
if conn.is_connected():
try:
# DB再接続
conn.ping(reconnect=True)
# 自動コミット禁止
conn.autocommit = False
# カーソル作成
cft = conn.cursor()
# DB選択
cft.execute("use arkdb;")
# insert構文
sql = ("""
INSERT INTO usertbl (addr)
VALUES
(%s)
""")
addr = [
('東京',),
('大阪',),
('福岡',)
]
# 複数件のデータを挿入
cft.executemany(sql, addr)
# コミット
conn.commit()
# 実行結果
print(f"{cft.rowcount} 件追加しました。")
except mysql.connector.Error as e:
# データベースのロールバック
conn.rollback()
print(e)
finally:
# データベースのクローズ
cft.close()
conn.close()
else:
exit()
import mysql.connector # DB接続情報  ユーザー名 パスワード名 conn = mysql.connector.connect( host="localhost", port="3306", user="root", password="#123456@" ) # DB接続状況確認 if conn.is_connected(): try: # DB再接続 conn.ping(reconnect=True) # 自動コミット禁止 conn.autocommit = False # カーソル作成 cft = conn.cursor() # DB選択 cft.execute("use arkdb;") # insert構文 sql = (""" INSERT INTO usertbl (addr) VALUES (%s) """) addr = [ ('東京',), ('大阪',), ('福岡',) ] # 複数件のデータを挿入 cft.executemany(sql, addr) # コミット conn.commit() # 実行結果 print(f"{cft.rowcount} 件追加しました。") except mysql.connector.Error as e: # データベースのロールバック conn.rollback() print(e) finally: # データベースのクローズ cft.close() conn.close() else: exit()
import mysql.connector

# DB接続情報  ユーザー名 パスワード名
conn = mysql.connector.connect(
    host="localhost", port="3306", user="root", password="#123456@"
)

# DB接続状況確認
if conn.is_connected():
    try:
        # DB再接続
        conn.ping(reconnect=True)
        
        # 自動コミット禁止
        conn.autocommit = False

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

        # DB選択
        cft.execute("use arkdb;")

        # insert構文
        sql = ("""
        INSERT INTO usertbl  (addr)
        VALUES 
            (%s)
        """)

        addr = [
            ('東京',),
            ('大阪',),
            ('福岡',)
        ]
        
        # 複数件のデータを挿入
        cft.executemany(sql, addr)
        
        # コミット
        conn.commit()
        
        # 実行結果
        print(f"{cft.rowcount} 件追加しました。")
        
    except mysql.connector.Error as e:
        # データベースのロールバック
        conn.rollback()
        print(e)
        
    finally:
        # データベースのクローズ
        cft.close()
        conn.close()
else:

    exit()

 

Python

Posted by arkgame