본문 바로가기

Python/공부공부

[Python] pymysql 라이브러리 (MySQL 데이터 베이스 연동)

 

( 설치 )

pip install pymysql

 

( DB연결 ) _MySQL

connection = pymysql.connect(
    host='your_host',         # 데이터베이스 서버의 호스트 (예: 'localhost' 또는 IP 주소)
    user='your_username',     # MySQL 사용자 이름
    password='your_password', # MySQL 사용자 비밀번호
    db='your_database',       # 연결할 데이터베이스 이름
    charset='utf8mb4',        # 인코딩 설정
    cursorclass=pymysql.cursors.DictCursor  # 결과를 딕셔너리 형식으로 반환
)

 


 

[ cursor ]

데이터베이스와 상호작용을 담당하는 인터페이스.

 - execute() : SQL 쿼리 실행 메소드.  cursor.execute(sql, parameters)

 - executemany() : 다수의 SQL 쿼리문 한번에 실행.  cursor.executemany(sql, param_list)

 

 - fetchall() : 실행한 쿼리의 모든 결과를 list로 반환.  cursor.fetchall()

 - fetchone() : 실행한 쿼리 결과에서 하나의 행을 반환 / 없는경우 None 반환.  cursor.fetchone()

 - fetchmany() :실행한 쿼리 결과에서 최대 n개의 행을 반환.  cursor.fetchmanu(size=5)

 

 - close() : 객체 닫기. (DB연결해제)   cursor.close()

 -commit() : 실제 DB에 반영. (INSERT, UPDATE, DELETE)    connection.commit()

 - rollback() : 문제 발생 시 DB변경사항 취소. (트랜잭션 _ INSERT, UPDATE, DELETE )     connection.rollback()

 


 

( 쿼리실행 )

 - SELECT 

try:
    with connection.cursor() as cursor:  # 커서를 열고, with 블록을 벗어나면 자동으로 닫힘
        sql = "SELECT * FROM your_table WHERE condition = %s"
        cursor.execute(sql, ('value',))
        result = cursor.fetchall()  # 결과 가져오기

        for row in result:
            print(row)

finally:
    connection.close()  # 연결 종료

=> ('value', )  : cursor.execute()는 튜플형태로 전달해야 하기 때문에, 단일값인 value를 튜플 형태로 전달.

 

 - INSERT

cursor = connection.cursor()
try:
    sql = "INSERT INTO your_table(col1, col2) VALUES(%s, %s)"
    values = ('val1', 'val2')
    cursor.execute(sql, values)
    
    # 영향받은 행(row) 수를 rowcount로 확인
    result = cursor.rowcount 
    
    connection.commit()		# 트랜잭션 확정

except Exception as e:
    connection.rollback()	 # 오류 발생 시 롤백하여 변경 사항 취소
    
finally:
    cursor.close()  # 수동으로 커서 닫기
    connection.close()

=> cursor.rowcount : 쿼리 실행 이후 영향받은 레코드 수를 반환. (1 : 성공 / 0 : 실패 or 영향X)