Python과 MySQL 프로그래밍 개요

2024-07-27

Python은 다양한 분야에서 활용되는 강력하고 유연한 프로그래밍 언어입니다. MySQL은 가장 인기 있는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나입니다. 두 기술을 함께 사용하면 웹 애플리케이션, 데이터 분석, 자동화 도구 등 다양한 프로젝트를 구축할 수 있습니다.

MySQL 연결

Python에서 MySQL 데이터베이스에 연결するには pymysql 또는 mysql-connector-python과 같은 라이브러리를 사용해야 합니다. 다음은 pymysql을 사용하여 MySQL 데이터베이스에 연결하는 기본 코드입니다.

import pymysql

# 데이터베이스 연결 정보
db_host = "localhost"
db_user = "your_username"
db_password = "your_password"
db_name = "your_database"

# 데이터베이스 연결
conn = pymysql.connect(host=db_host, user=db_user, password=db_password, database=db_name)

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

데이터베이스 조작

데이터베이스에 연결되면 다음과 같은 SQL 쿼리를 사용하여 데이터를 조작할 수 있습니다.

  • INSERT: 데이터를 테이블에 삽입합니다.
  • SELECT: 테이블에서 데이터를 검색합니다.
  • UPDATE: 테이블의 데이터를 업데이트합니다.

다음은 Python에서 SQL 쿼리를 실행하는 예시 코드입니다.

# 데이터 삽입
cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("John Doe", "[email protected]"))

# 데이터 검색
cursor.execute("SELECT * FROM users")
users = cursor.fetchall()

# 데이터 업데이트
cursor.execute("UPDATE users SET name = %s WHERE id = %s", ("Jane Doe", 1))

# 데이터 삭제
cursor.execute("DELETE FROM users WHERE email = %s", ("[email protected]"))

쿼리 결과 처리

SQL 쿼리를 실행하면 결과가 커서 객체에 저장됩니다. 결과는 다음과 같은 방법으로 처리할 수 있습니다.

  • fetchone(): 단일 행을 튜플 형식으로 반환합니다.
  • fetchmany(size): 지정된 개수의 행을 튜플 목록 형식으로 반환합니다.

다음은 쿼리 결과를 처리하는 예시 코드입니다.

# 단일 행 가져오기
user = cursor.fetchone()
print(user[0], user[1])  # 컬럼 값 출력

# 모든 행 가져오기
users = cursor.fetchall()
for user in users:
    print(user[0], user[1])

# 지정된 개수의 행 가져오기
users = cursor.fetchmany(2)
for user in users:
    print(user[0], user[1])

자원 해제

데이터베이스 작업을 완료한 후에는 커서와 연결 객체를 닫아야 합니다.

# 커서 닫기
cursor.close()

# 연결 닫기
conn.close()
  • [파이썬 + MySQL, 파이썬으로 연동하기](https://trustyou.tist



Python과 MySQL 연동 예제 코드

데이터베이스 연결

import pymysql

# 데이터베이스 연결 정보
db_host = "localhost"
db_user = "your_username"
db_password = "your_password"
db_name = "your_database"

# 데이터베이스 연결
conn = pymysql.connect(host=db_host, user=db_user, password=db_password, database=db_name)

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

데이터 삽입

# 사용자 데이터 삽입
name = "John Doe"
email = "[email protected]"

cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", (name, email))
conn.commit()  # 데이터베이스 변경 내용 반영

데이터 검색

# 모든 사용자 검색
cursor.execute("SELECT * FROM users")
users = cursor.fetchall()

for user in users:
    print(f"ID: {user[0]} 이름: {user[1]} 이메일: {user[2]}")

데이터 업데이트

# 사용자 ID 1의 이름을 Jane Doe로 변경
user_id = 1
new_name = "Jane Doe"

cursor.execute("UPDATE users SET name = %s WHERE id = %s", (new_name, user_id))
conn.commit()

데이터 삭제

# 이메일 [email protected]인 사용자 삭제
email = "[email protected]"

cursor.execute("DELETE FROM users WHERE email = %s", (email,))
conn.commit()

자원 해제

# 커서 닫기
cursor.close()

# 연결 닫기
conn.close()

참고:

  • 위 코드는 기본적인 예시이며, 실제 프로젝트에서는 상황에 맞게 코드를 수정해야 합니다.
  • 에러 처리, 입력 데이터 검증, 보안 등을 고려해야 합니다.

추가 예제:

  • 특정 조건에 맞는 데이터 검색
  • JOIN을 사용하여 여러 테이블의 데이터 연결
  • 서브쿼리 사용
  • 저장 프로시저 호출
  • 트랜잭션 처리

주의:

  • 실제 데이터베이스를 사용하기 전에 백업을 수행하는 것이 좋습니다.
  • 잘못된 SQL 쿼리를 실행하면 데이터 손실이 발생할 수 있으므로 주의해야 합니다.



Python과 MySQL 연동을 위한 대체 방법

MySQL Connector/Python:

  • 공식 MySQL 드라이버입니다.
  • 설치 및 사용이 용이합니다.
  • 다양한 기능을 제공합니다.
  • pymysql보다 빠르다는 주장이 있습니다.

sqlalchemy:

  • 객체 관계 매핑(ORM)을 지원하는 라이브러리입니다.
  • 복잡한 데이터베이스 작업을 간편하게 처리할 수 있도록 합니다.
  • 다양한 데이터베이스 시스템을 지원합니다.
  • MySQL뿐만 아니라 PostgreSQL, SQLite 등 다른 데이터베이스와도 연동 가능합니다.

aiomysql:

  • 비동기 방식으로 MySQL 데이터베이스에 연결하고 조작할 수 있도록 하는 라이브러리입니다.
  • asyncio 기반으로 개발되어 비동기 프로그래밍에 적합합니다.
  • 고성능 애플리케이션 개발에 유용합니다.

MyPy:

  • 정적 타입 검사를 지원하는 MySQL 드라이버입니다.
  • 코드 오류를 미리 방지하여 안전하고 신뢰성 있는 개발을 가능하게 합니다.
  • 다른 타입 검사 도구와 함께 사용할 수 있습니다.

선택 가이드:

  • MySQL Connector/Python: 빠르고 사용하기 쉬운 기본적인 라이브러리를 원하는 경우
  • sqlalchemy: 복잡한 데이터베이스 작업을 간편하게 처리하고 싶거나 다양한 데이터베이스 시스템을 지원하는 라이브러리를 원하는 경우
  • aiomysql: 비동기 방식으로 MySQL 데이터베이스에 연결하고 조작해야 하는 경우
  • MyPy: 코드 오류를 방지하고 안전하게 개발하고 싶거나 정적 타입 검사를 지원하는 라이브러리를 원하는 경우
  • 각 라이브러리마다 장단점이 존재하므로, 프로젝트의 요구 사항에 맞는 라이브러리를 선택하는 것이 중요합니다.
  • 공식 문서를 참고하여 라이브러리를 설치하고 사용하는 방법을 확인하세요.

추가적으로 고려할 사항:

  • 데이터베이스 연결 풀링 라이브러리 사용: 여러 연결을 효율적으로 관리하여 성능 향상
  • ORM 프레임워크 사용: 객체를 사용하여 데이터베이스와 상호 작용, 코드 간결성 및 유지 관리 용이
  • GUI 도구 사용: 데이터베이스 작업 시각화 및 간편하게 수행

python mysql postgresql

python mysql postgresql

cx_Oracle: 결과 세트 반복 방법

1. fetch() 함수 사용fetch() 함수는 결과 세트에서 한 행씩 반환합니다. 각 반환 값은 튜플 형식이며, 각 열의 값을 나타냅니다.2. fetchall() 함수 사용fetchall() 함수는 결과 세트의 모든 행을 한 번에 리스트 형식으로 반환합니다


Django 클래스 뷰 프로그래밍 개요 (Python, Django, View)

클래스 뷰는 다음과 같은 장점을 제공합니다.코드 재사용성 향상: 공통 로직을 한 번 작성하고 상속을 통해 여러 뷰에서 재사용할 수 있습니다.코드 가독성 향상: 뷰 로직이 명확하게 구분되어 코드를 이해하기 쉽습니다.유지 관리 용이성 향상: 코드 변경이 필요할 경우 한 곳만 변경하면 모든 관련 뷰에 영향을 미칠 수 있습니다