[Python – 기초 강좌] 14. Database 사용하기 (with MySQL)

Python에서 Database 사용

개요

Python에서 데이터베이스(DB, Database)를 사용하는 것은 데이터 관리와 분석을 자동화하고, 다양한 소프트웨어 솔루션에 필수 데이터 지원을 제공합니다.

Python은 SQLite, MySQL, PostgreSQL 등 다양한 데이터베이스 시스템에 쉽게 접근할 수 있도록 도와주는 표준 라이브러리 및 서드파티 라이브러리를 제공합니다.

구체적인 사용예

  1. 웹 개발:
    • 웹 애플리케이션에서 사용자 정보, 상품 정보, 주문 내역 등을 저장하고 관리할 때 데이터베이스가 필수적입니다.
    • Python의 Django나 Flask 같은 웹 프레임워크는 데이터베이스와의 연동을 지원하여 강력한 백엔드 시스템을 구축할 수 있습니다.
  2. 데이터 분석:
    • 데이터 과학과 분석 분야에서는 많은 양의 데이터를 저장하고 처리해야 할 필요가 있습니다.
    • Python의 pandas 라이브러리와 같이 데이터베이스에서 데이터를 읽어 분석하고 결과를 다시 데이터베이스에 저장하는 작업을 자주 수행합니다.
  3. 시스템 자동화:
    • 여러 시스템 간의 데이터 동기화나 백업, 리포팅 등을 자동화하는데 Python 스크립트를 사용하여 데이터베이스와 연동할 수 있습니다.
  4. IoT 애플리케이션:
    • IoT 디바이스에서 수집한 데이터를 중앙 데이터베이스에 저장하고 분석하는데 Python이 자주 사용됩니다.
    • Python은 다양한 하드웨어와 호환성이 좋고, 데이터 처리 및 데이터베이스 핸들링이 용이하기 때문입니다.

MySQL 사용하기

MySQL 소개

MySQL은 전 세계적으로 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.

웹 애플리케이션은 물론, 많은 소프트웨어 개발 프로젝트에서 데이터를 저장하고 관리하기 위해 MySQL을 선택합니다.

MySQL은 사용이 간편하고, 확장성이 뛰어나며, 다양한 운영 체제에서 지원됩니다

MySQL

MySQL 설치

MySQL 사이트에서 MySQL을 다운받아 설치합니다.

Install-MySQL

설치 패키지 실행 -> Custom 선택

설치항목

  1. [MySQL Servers -> MySQL Server -> MySQL Server 8.0.36 – X64] ->
  2. [Applications] – [MySQL Workbench] – [MySQL Workbench 8.0] – [MySQL Workbench 8.0.21 – X64]
  3. [Documentation] – [Samples and Examples] – [Samples and Examples 8.0] – [Samples and Examples 8.0.21 – X86]

인증방법 -> Root 계정 -> Service 설정(이름은 MySQLService로 변경) 등을 설정하고 설치를 마칩니다.

아래 모르시겠으면 유튜브 영상을 참조해주세요.

라이브러리 설치

MySQL을 사용하기 위해서는 일반적으로 mssql-connector-python 혹은 PyMySQL을 설치합니다.

이번 포스팅에서는 PyMySQL을 사용해보도록 하겠습니다.

설치는 pip의 다음 명령어를 통해 설치합니다.

$ pip install pymysql

그리고 Python 코드에서 pymysql을 import 해줍니다.

import pymysql

Database 연결

Database 작업을 시작하기 전에 MySQL 데이터베이스 서버에 연결해야 합니다.

PyMySQL에서는 connect() 함수를 사용하여 데이터베이스 서버에 연결합니다.

연결 정보에는 호스트 이름, 데이터베이스 사용자 이름, 비밀번호, 데이터베이스 이름 등이 포함됩니다.

(사용자 이름과 비밀번호는 앞에서 만들었던 이름과 비밀번호를 사용하면 됩니다. 본 예제에서는 root / Devitworld!!!! 를 이름과 비밀번호로 사용하였습니다.)

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='Devitworld!!!!')

Cursor 객체 생성

데이터베이스와의 상호작용은 Cursor 객체를 통해 이루어집니다.

Cursor는 SQL 명령을 실행하고, 결과를 가져오는 데 사용됩니다.

Cursor는 일반적으로 cursor() 메서드를 사용하여 생성됩니다.

myCursor = connection.cursor()

Database 생성

CREATE DATABASE sql 문법을 cursor의 execute()를 통해 실행하여 devitworld_db 라는 이름의 데이터베이스를 생성합니다.

import pymysql

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='Devitworld!!!!')

try:
    # Create a cursor object
    myCursor = connection.cursor()
    # Create a new database
    sql = "CREATE DATABASE devitworld_db"
    myCursor.execute(sql)
finally:
    # 데이터베이스 서버 연결 종료
    connection.close()

Table 생성

CREATE TABLE sql문을 이용하여, devitworld_db에 연결하여 users Table의 scheme 정보를 SQL 문법을 통하여 Table을 생성합니다.

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='Devitworld!!!!',
                             database='devitworld_db')

try:
    # Create a cursor object
    myCursor = connection.cursor()
    # Create a users table
    sql = """
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        email VARCHAR(255) NOT NULL,
        password VARCHAR(255) NOT NULL
    )
    """
    myCursor.execute(sql)
finally:
    # Close the connection
    connection.close()

데이터 삽입

INSERT sql 문법을 사용하여 devitworld_db DB의 users Table에 사용자 데이터를 추가하였습니다.

execute() 후, commit()을 통해 데이터를 저장합니다.

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='Devitworld!!!!',
                             database='devitworld_db')


try:
  myCursor = connection.cursor()
  # insert data
  sql = "INSERT INTO users (email, password) VALUES (%s, %s)"
  myCursor.execute(sql, ('insfamworld@naver.com', 'strong_password'))
  # commit the changes
  connection.commit()
finally:
  connection.close()

데이터 조회

SELECT sql 문법을 통해 데이터를 조회할 수 있습니다.

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='Devitworld!!!!',
                             database='devitworld_db')

try:
  myCursor = connection.cursor()
  # check the result
  sql = "SELECT id, email FROM users WHERE email = %s"
  myCursor.execute(sql, ('user@example.com',))
  result = myCursor.fetchone()
  print(result)
finally:
    connection.close()

연결 종료

Database 관련 작업이 모두 끝나면, close() 메소드를 호출하여 연결을 종료합니다.

    connection.close()

라이브러리 종류

위와 같이 pymysql 라이브러리 외에도 Database를 사용하기 위한 다양한 라이브러리들을 사용할 수 있습니다.

SQLAlchemy

SQLAlchemy는 Python에서 가장 인기 있는 ORM (Object Relational Mapping) 라이브러리 중 하나입니다.

이 라이브러리는 데이터베이스 테이블을 Python 클래스로 표현하고, 데이터베이스 세션 내의 객체를 통해 데이터베이스와의 상호 작용을 추상화합니다.

이를 통해 SQL 쿼리 작성 없이 데이터베이스를 조작할 수 있습니다.

기능:

  • 복잡한 쿼리 지원
  • 트랜잭션과 데이터베이스 세션 관리
  • 다양한 데이터베이스 지원 (SQLite, MySQL, PostgreSQL 등)

Peewee

Peewee는 작고 간단한 ORM 라이브러리로, SQLAlchemy보다 가벼운 대안을 제공합니다.

작은 프로젝트나 간단한 애플리케이션에 적합하며, 쉽게 배울 수 있고 사용하기도 편리합니다.

기능:

  • 간단하고 읽기 쉬운 문법
  • 다양한 데이터베이스 백엔드 지원
  • 데이터베이스 연결 풀링

Django ORM

Django 웹 프레임워크에 내장된 ORM 시스템입니다.

웹 애플리케이션 개발에 특화되어 있으며, 데이터베이스 설계에서부터 관리까지 모든 과정을 간소화하여 효율적인 개발을 도모합니다.

기능:

  • 강력한 모델 정의
  • 자동 마이그레이션 유틸리티
  • 강력한 쿼리 구성 기능

Pony ORM

Pony ORM은 개발자가 Python 코드로 직접 쿼리를 작성할 수 있게 해주는 특별한 ORM입니다.

쿼리를 Python 제너레이터로 작성하며, 이를 SQL로 변환해줍니다.

기능:

  • 직관적인 쿼리 작성
  • 지연 로딩과 즉각 로딩 지원
  • 데이터베이스 스키마 마이그레이션 도구

Redis-py

Redis-py는 Python에서 Redis 데이터베이스를 사용하기 위한 클라이언트 라이브러리입니다.

Redis는 주로 캐싱, 메시지 브로커로 사용되며, 빠른 성능을 제공합니다.

기능:

  • 문자열, 리스트, 집합 등 다양한 데이터 타입 지원
  • 트랜잭션, 파이프라인 지원
  • 비동기 API 지원

참고 문헌

Leave a Comment