728x90
반응형
데이터베이스에서 execute() 함수 역할
execute() 함수는 SQL 쿼리를 실행하는 역할을 합니다. 주로 Python의 SQLite, MySQL, PostgreSQL 등의 데이터베이스 라이브러리에서 사용되며, 데이터 조회, 삽입, 수정, 삭제 등의 작업을 수행할 때 사용됩니다.
1. execute() 함수의 기본 개념
- execute() 함수는 SQL 문장을 실행하는 역할을 합니다.
- 주로 cursor 객체를 통해 사용됩니다.
- execute() 실행 후에는 commit()을 호출하여 변경사항을 반영해야 합니다(필요한 경우).
- SELECT 쿼리를 실행한 후 fetchone(), fetchall() 등을 이용하여 데이터를 가져올 수 있습니다.
2. Python sqlite3 예제 (기본 사용법)
import sqlite3
# 데이터베이스 연결 (없으면 새로 생성)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
""")
# 데이터 삽입 (execute() 사용)
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
# 변경사항 저장 (commit 필수)
conn.commit()
# 데이터 조회
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
print(rows)
# 연결 종료
conn.close()
3. execute() 함수의 주요 역할
역할 | 설명 | 예제 |
SQL 실행 | SQL 문을 실행하여 데이터를 삽입, 수정, 삭제, 조회 가능 | cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25)) |
파라미터 바인딩 | ? 또는 %s 등을 사용하여 SQL 인젝션 방지 | cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",)) |
데이터 조회 | SELECT 쿼리 실행 후 데이터를 가져옴 | cursor.execute("SELECT * FROM users") 후 fetchall() 사용 |
트랜잭션 처리 | 변경사항을 저장하려면 commit() 호출 필요 | conn.commit() |
DDL 실행 | 테이블 생성 및 삭제 가능 | cursor.execute("CREATE TABLE users (...)") |
4. 다른 데이터베이스에서 execute() 사용 예시
MySQL (with mysql-connector-python)
import mysql.connector
conn = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="testdb"
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
PostgreSQL (with psycopg2)
import psycopg2
conn = psycopg2.connect(
host="localhost",
dbname="testdb",
user="postgres",
password="password"
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
5. execute()와 executemany() 차이점
execute()는 한 번에 하나의 SQL 쿼리를 실행하는 반면,
executemany()는 여러 개의 데이터를 한 번에 삽입할 때 사용됩니다.
# execute(): 하나의 데이터만 삽입
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
# executemany(): 여러 개의 데이터를 한 번에 삽입
data = [("Bob", 30), ("Charlie", 35), ("David", 40)]
cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", data)
conn.commit()
6. execute() 사용 시 주의할 점
✅ SQL 인젝션 방지: execute() 사용 시 변수 직접 삽입 대신 파라미터 바인딩(?, %s) 사용
✅ commit() 호출: INSERT, UPDATE, DELETE 실행 후 반드시 conn.commit() 필요
✅ Connection & Cursor 닫기: 사용 후 conn.close() 호출하여 연결 종료
✅ 에러 핸들링: try-except를 사용하여 예외 처리
try:
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Eve", 28))
conn.commit()
except Exception as e:
print("Error:", e)
finally:
conn.close()
7. 요약
- execute()는 SQL 쿼리를 실행하는 함수로, 데이터 조회, 삽입, 수정, 삭제 등을 수행할 수 있음.
- execute("SQL", params) 방식으로 SQL 인젝션 방지 가능.
- SELECT 실행 후에는 fetchone(), fetchall() 등을 이용해 데이터를 가져옴.
- commit()을 호출해야 변경 사항이 저장됨 (SELECT는 필요 없음).
- executemany()를 사용하면 여러 개의 데이터를 한 번에 처리할 수 있음.
👉 execute()는 데이터베이스 작업의 핵심 함수로, 다양한 데이터베이스에서 동일한 방식으로 사용 가능! 🚀
300x250
반응형