[파이썬] 데이터베이스 연동에서 쿼리 구문 처리

데이터베이스와의 연동은 애플리케이션에서 중요한 부분입니다. 데이터베이스에 쿼리를 보내고 결과를 받아오는 과정은 많은 애플리케이션에 필수적입니다. Python을 사용하여 데이터베이스와 연동하고 쿼리 구문을 처리하는 방법에 대해 알아보겠습니다.

데이터베이스 연결

Python에서 데이터베이스와 연결하기 위해 주로 Python DB-API를 사용합니다. Python DB-API는 Python과 데이터베이스 간 상호작용을 위한 인터페이스를 제공하는 표준 모듈입니다. 대표적인 Python DB-API 인터페이스 중 하나는 sqlite3입니다. 아래는 sqlite3을 사용하여 SQLite 데이터베이스에 연결하는 예제입니다.

import sqlite3

# 데이터베이스와 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cursor = conn.cursor()

# 연결 종료
conn.close()

위 코드에서 sqlite3.connect() 함수를 사용하여 데이터베이스에 연결하고, conn.cursor() 메서드를 호출하여 커서를 생성합니다.

쿼리 실행

쿼리 실행은 연결된 데이터베이스에 대해 데이터를 조회하거나 갱신하기 위해 필요합니다. sqlite3에서는 cursor.execute() 메서드를 사용하여 쿼리를 실행합니다. 여러분은 쿼리를 문자열 형태로 작성하고, 필요한 매개변수를 전달할 수도 있습니다.

다음은 데이터베이스에서 테이블을 만들고 데이터를 삽입하는 예제입니다.

import sqlite3

# 데이터베이스와 연결
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 테이블 생성 쿼리 실행
create_table_query = "CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT)"
cursor.execute(create_table_query)

# 데이터 삽입 쿼리 실행
insert_data_query = "INSERT INTO students (id, name) VALUES (?, ?)"
student_data = [
    (1, 'John'),
    (2, 'Jane'),
    (3, 'Mike')
]
cursor.executemany(insert_data_query, student_data)

# 변경사항 커밋
conn.commit()

# 연결 종료
conn.close()

위 코드에서는 cursor.execute() 메서드를 사용하여 테이블 생성 쿼리와 데이터 삽입 쿼리를 실행합니다. cursor.executemany() 메서드를 사용하여 여러 개의 데이터를 한 번에 삽입할 수도 있습니다.

결과 가져오기

쿼리 실행 후 결과를 가져오기 위해서는 cursor.fetchall() 또는 cursor.fetchone() 등의 메서드를 사용합니다. fetchall() 메서드는 모든 결과를 리스트로 가져오고, fetchone() 메서드는 결과 중 첫 번째 행만 가져옵니다.

import sqlite3

# 데이터베이스와 연결
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 데이터 조회 쿼리 실행
select_query = "SELECT * FROM students"
cursor.execute(select_query)

# 결과 가져오기
result = cursor.fetchall()

# 결과 출력
for row in result:
    print(row)

# 연결 종료
conn.close()

위 코드에서는 cursor.fetchall() 메서드를 사용하여 모든 결과를 가져온 후, 반복문을 사용하여 결과를 출력합니다.

데이터베이스 연동에서 쿼리 구문 처리는 Python 애플리케이션에서 매우 중요한 부분입니다. Python DB-API를 사용하여 데이터베이스와 연결하고 쿼리를 실행하고 결과를 가져오는 방법에 대해 알아보았습니다. 이를 통해 데이터베이스를 사용하여 데이터를 효과적으로 관리할 수 있습니다.