개요
MySQL 데이터베이스에 새 레코드를 INSERT한 후, 자동으로 생성된 ID(AUTO_INCREMENT 값)를 바로 확인해야 하는 경우가 자주 있습니다. 이 글에서는 Python의 pymysql 라이브러리를 사용해 레코드 삽입 직후의 ID를 손쉽게 가져오는 방법을 단계별로 살펴봅니다.
사전 준비 사항
시작하기 전에 아래 환경이 갖춰져 있어야 합니다.
- MySQL 8.0.12 이상 설치
- Python 3.6.3(32비트) 이상 설치
- pip 명령어를 통해 pymysql 설치
pymysql 설치하기
터미널 또는 명령 프롬프트에서 다음 pip 명령어를 실행하여 pymysql을 설치합니다.
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 코드로 INSERT 후 ID 얻기
같은 데이터베이스('business')와 테이블('student')을 대상으로 Python에서 레코드를 삽입하고, 커서(cursor) 객체의 lastrowid 속성을 사용하면 방금 삽입된 레코드의 ID를 즉시 확인할 수 있습니다.
import pymysql
# 데이터베이스 연결
conn = pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='business'
)
try:
with conn.cursor() as cursor:
# 새 레코드 삽입
sql = "INSERT INTO student (Name) VALUES (%s)"
cursor.execute(sql, ('David',))
conn.commit()
# 방금 삽입된 레코드의 ID 가져오기
inserted_id = cursor.lastrowid
print("삽입된 레코드의 ID:", inserted_id)
finally:
conn.close()위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
삽입된 레코드의 ID: 4
핵심 포인트 정리
- cursor.lastrowid: 가장 최근에 실행된 INSERT 문에서 자동 생성된 ID를 반환합니다. 별도의 추가 쿼리 없이 즉시 확인할 수 있어 가장 간편한 방법입니다.
- SELECT LAST_INSERT_ID(): 대안으로, 연결 단위로 마지막에 생성된 ID를 조회하는 SQL 함수를 직접 실행할 수도 있습니다.
- commit() 호출 필수: INSERT 실행 후 반드시 commit()을 호출해야 변경 사항이 데이터베이스에 반영됩니다.
이처럼 pymysql의 lastrowid 속성만 활용하면, MySQL에 데이터를 삽입한 직후 자동 생성된 ID를 별도의 조회 과정 없이 간단하게 얻을 수 있습니다.