MariaDB 사용법

1. MariaDB 개요 및 특징

MariaDB는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로, MySQL과 매우 높은 호환성을 자랑합니다. 파이썬 환경에서 MariaDB를 다루기 위해서는 공식 커넥터 라이브러리를 설치하여 연동할 수 있습니다.

사전 준비: 커넥터 설치

터미널 또는 명령 프롬프트에서 아래 명령어를 실행하여 MariaDB 파이썬 커넥터를 설치합니다.

pip install mariadb

2. Python과 MariaDB 연동 및 기본 CRUD 실습

파이썬 코드를 통해 MariaDB에 접속하고 데이터를 관리하는 단계별 가이드입니다.

① 데이터베이스 연결하기

mariadb.connect() 함수를 사용하여 호스트, 사용자 계정, 비밀번호, 데이터베이스 정보를 설정하고 연결을 수립합니다.

import mariadb

try:
    conn = mariadb.connect(
        host="localhost",
        user="yourusername",
        password="yourpassword",
        database="yourdatabase"
    )
    print("MariaDB에 성공적으로 연결되었습니다.")
except mariadb.Error as e:
    print(f"MariaDB에 연결하는 중 오류 발생: {e}")

② 테이블 생성하기

cursor.execute()를 통해 SQL문을 실행하여 데이터 저장의 기본 단위가 되는 테이블을 생성합니다.

cursor = conn.cursor()

try:
    cursor.execute(
        """CREATE TABLE IF NOT EXISTS employees (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            address VARCHAR(255)
        )"""
    )
    conn.commit()
    print("테이블이 성공적으로 생성되었거나 이미 존재합니다.")
except mariadb.Error as e:
    print(f"테이블 생성 오류: {e}")

③ 데이터 추가 (INSERT)

INSERT INTO 문을 사용하여 새로운 레코드를 삽입하고 conn.commit()으로 반영합니다.

try:
    cursor.execute(
        "INSERT INTO employees (name, address) VALUES (?, ?)",
        ("John Doe", "123 Blue Street")
    )
    conn.commit()
    print(f"{cursor.rowcount}개의 레코드를 삽입했습니다.")
except mariadb.Error as e:
    print(f"데이터 삽입 오류: {e}")

④ 데이터 조회 (SELECT)

저장된 데이터를 조회하고 반복문을 통해 출력합니다.

try:
    cursor.execute("SELECT name, address FROM employees")
    for name, address in cursor:
        print(f"Name: {name}, Address: {address}")
except mariadb.Error as e:
    print(f"데이터 조회 오류: {e}")

⑤ 데이터 업데이트 (UPDATE)

조건에 맞는 레코드의 데이터를 수정합니다.

try:
    cursor.execute(
        "UPDATE employees SET address = ? WHERE name = ?",
        ("456 Green Avenue", "John Doe")
    )
    conn.commit()
    print(f"{cursor.rowcount}개의 레코드를 업데이트했습니다.")
except mariadb.Error as e:
    print(f"데이터 업데이트 오류: {e}")

⑥ 데이터 삭제 (DELETE)

특정 조건에 일치하는 레코드를 테이블에서 제거합니다.

try:
    cursor.execute(
        "DELETE FROM employees WHERE name = ?",
        ("John Doe",)
    )
    conn.commit()
    print(f"{cursor.rowcount}개의 레코드를 삭제했습니다.")
except mariadb.Error as e:
    print(f"데이터 삭제 오류: {e}")

3. 안정적인 트랜잭션 처리 (Transaction Handling)

여러 개의 SQL 작업을 하나의 논리적 단위로 묶어 처리할 때 트랜잭션을 사용합니다. 오류 발생 시 rollback()을 통해 데이터 무결성을 유지할 수 있습니다.

try:
    conn.autocommit = False  # 자동 커밋 비활성화
    
    # 다중 작업 수행
    cursor.execute("INSERT INTO employees (name, address) VALUES (?, ?)", ("Alice", "789 Red Road"))
    cursor.execute("INSERT INTO employees (name, address) VALUES (?, ?)", ("Bob", "101 Yellow Lane"))
    
    conn.commit()  # 정상 처리 시 커밋
    print("트랜잭션이 성공적으로 커밋되었습니다.")

except mariadb.Error as e:
    conn.rollback()  # 오류 발생 시 롤백
    print(f"트랜잭션 오류: {e}")

finally:
    conn.autocommit = True  # 자동 커밋 상태 복원
    conn.close()            # 데이터베이스 연결 종료

답글 남기기