MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

PythonでMySQLデータベースへの挿入後にIDを取得する方法

はじめに

PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。

前提条件

作業を始める前に、以下の環境が整っていることを確認してください。

  • MySQL 8.0.12 がインストールされていること
  • Python 3.6.3(32ビット) がインストールされていること
  • pipコマンドで pymysql がインストールされていること

pymysqlのインストール方法

pymysqlがまだインストールされていない場合は、以下のpipコマンドを実行してください。

pip install pymysql

サンプルデータベースの準備

今回は、データベース名を「business」、テーブル名を「student」とします。すでに複数件のレコードが登録されており、最新のレコードにはIDとして「3」が割り振られている状態です。

テーブルの中身を確認するためのクエリは以下のとおりです。

mysql> select * from student;

実行結果は次のようになります。

+------+-------+
| id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Bob   |
|    3 | Smith |
+------+-------+
3 rows in set (0.00 sec)

Pythonで挿入後のIDを取得する

同じデータベース「business」・テーブル「student」に対して、Pythonから新しいレコードを挿入し、その直後にIDを取得してみましょう。ポイントは、カーソルオブジェクトのlastrowid属性を参照することです。これは、直前に実行したINSERT文によって生成されたAUTO_INCREMENTの値を返してくれます。

以下がPythonコードの例です。

import pymysql

# MySQLサーバーへ接続
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='business'
)

cursor = conn.cursor()

# レコードを挿入
sql = "INSERT INTO student (Name) VALUES (%s)"
cursor.execute(sql, ('David',))

# 挿入後に自動採番されたIDを取得
inserted_id = cursor.lastrowid
print("挿入されたレコードのID:", inserted_id)

# 変更を確定して接続を閉じる
conn.commit()
cursor.close()
conn.close()

ポイント: IDの取得には cursor.lastrowid のほかに conn.insert_id() を使う方法もあります。どちらも直近のINSERTで生成されたIDを返します。

実行結果

スクリプトを実行すると、MySQL側とPython側の両方で、挿入直後のレコードに割り当てられたIDを確認できます。たとえば、既存の最大IDが「3」だった場合、新しく挿入されたレコードのIDとして「4」が出力されます。

挿入されたレコードのID: 4

まとめ

pymysqlを使えば、INSERT実行後にlastrowidを参照するだけで、自動採番されたIDを簡単に取得できます。外部キーとして関連テーブルへ登録する場合など、挿入直後にIDが必要となる処理では、ぜひこの方法を活用してください。

  1. JavaでMySQLデータベースにデータを挿入する方法をわかりやすく解説

    JavaからMySQLデータベースにデータを挿入するには、SQLのINSERTコマンドを使用します。基本的な構文は以下の通りです。 INSERT INTO テーブル名(カラム名1, カラム名2, ......カラム名N) VALUES(値1, 値2, ......値N); ここからは、Javaプログラムを使って実際にMySQLデータベースへレコードを挿入する手順を、順を追って見ていきましょう。 ステップ1:MySQLでテーブルを作成する まず、データの挿入先となるテーブルをMySQL側に作成します。以下のクエリを実行してください。 mysql> create table Insert

  2. JDBCを使ってMySQLデータベースにファイルを保存・挿入する方法

    一般的に、ファイルの内容はMySQLデータベースでは Clob 型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)のカラムに保存されます。 JDBCはClob型をサポートしており、これを利用することでファイルの内容をデータベースのテーブルに格納できます。 PreparedStatement インターフェースが提供する setCharacterStream() メソッドは、パラメータのインデックス(位置)を表す整数と、Readerオブジェクトを引数として受け取ります。 このメソッドを使うと、指定したインデックスのプレースホルダ(?)に対して、Readerオブジェクト(ファイ