「Python」executemanyメソッドでMySQLに複数件データを挿入するサンプル
環境
Python 3.9.13
Windows 11 Pro 21H2 64bit
MySQL 8.0.30
1.ライブラリmysql-connector-pythonをインストールします
pip install mysql-connector-python
pip install mysql-connector-python
pip install mysql-connector-python
2.テーブル「usertbl」を作成します
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文やコマンド)を実行します。
引数: 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文を個別に実行できるようにし、かつイテレータを返します。
使用例
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()