본문 바로가기

IT/DB

데이터베이스에서 execute 함수 역할은?

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
반응형