Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 데이터베이스에 데이터 삽입하기: INSERT 문 활용 가이드

데이터베이스 테이블에 새로운 레코드를 생성하고자 할 때 INSERT 문이 반드시 필요합니다. 이 글에서는 Python에서 MySQLdb 모듈을 사용해 데이터를 삽입하는 다양한 방법을 예제와 함께 살펴보겠습니다.

기본 INSERT 문 실행하기

다음 예제는 SQL INSERT 문을 실행하여 EMPLOYEE 테이블에 하나의 레코드를 생성합니다.

#!/usr/bin/python
import MySQLdb

# 데이터베이스 연결 열기
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() 메서드로 커서 객체 준비
cursor = db.cursor()

# 데이터베이스에 레코드를 삽입하는 SQL 쿼리 준비
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
   LAST_NAME, AGE, SEX, INCOME)
   VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # SQL 명령 실행
   cursor.execute(sql)
   # 변경 사항을 데이터베이스에 커밋
   db.commit()
except:
   # 오류 발생 시 롤백
   db.rollback()

# 서버 연결 종료
db.close()

동적 SQL 쿼리 생성하기

위 예제는 아래와 같이 작성하면 SQL 쿼리를 동적으로 생성할 수 있습니다. 값이 고정되어 있지 않고 변수에 따라 달라져야 하는 경우에 유용한 방식입니다.

#!/usr/bin/python
import MySQLdb

# 데이터베이스 연결 열기
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() 메서드로 커서 객체 준비
cursor = db.cursor()

# 데이터베이스에 레코드를 삽입하는 SQL 쿼리 준비
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
   LAST_NAME, AGE, SEX, INCOME) \
   VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
   ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # SQL 명령 실행
   cursor.execute(sql)
   # 변경 사항을 데이터베이스에 커밋
   db.commit()
except:
   # 오류 발생 시 롤백
   db.rollback()

# 서버 연결 종료
db.close()

매개변수 직접 전달 방식

다음 코드 조각은 매개변수를 직접 전달할 수 있는 또 다른 실행 형태입니다.

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
   (user_id, password))
..................................

참고 사항

INSERT 작업을 수행할 때는 다음 사항을 기억하면 좋습니다.

- commit(): INSERT, UPDATE, DELETE 등 데이터를 변경하는 작업 후에는 반드시 commit()을 호출해야 변경 사항이 실제 데이터베이스에 저장됩니다.
- rollback(): 오류가 발생했을 때 rollback()을 호출하면 트랜잭션이 시작되기 전 상태로 되돌려 데이터 무결성을 보호할 수 있습니다.
- SQL 인젝션 주의: 문자열 포매팅(% 연산자)으로 쿼리를 만들 때는 외부 입력값을 그대로 사용하지 않도록 주의해야 합니다. 가능하다면 매개변수화된 쿼리(parameterized query)를 사용하는 것이 안전합니다.