ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 파이썬에서 MySQL(MariaDB) 사용하기
    Programming Language/Python 2021. 1. 25. 07:28

    MySQL(MariaDB)을 파이썬에서 사용이 가능하다.

    몇몇 과정만 거치면 간단하게 쓸 수 있다.

     

    1. pymysql 라이브러리 설치

    - 파이썬 자체에는 MySQL 인식 기능이 없기 때문에 외부 라이브러리를 설치해야 한다.

    - 명령 프롬프트(cmd) 창을 켠 뒤에 pip install pymysql 을 입력한다.

    - 'Successfully installed pymysql' 문구가 보이면 제대로 설치가 된 것이다.

     

    2. 파이썬에서 MySQL 활용하기

    1) 데이터베이스 연결

    - pymysql을 import 하고 다음과 같이 데이터베이스를 연결한다.

    # (1) DB연결
    import pymysql
    conn = pymysql.connect (host='127.0.0.1',user ='root',password='본인 비밀번호',db='본인 db',charset='utf8')
    
    # (2) DB닫기
    conn.close()

    - 데이터베이스에 연결하기 위해 pymysql의 connect 함수를 이용해 인수를 적절히 넣어준다.

    - 대체적으로 다들 본인 로컬에 DB를 설치하고 사용할 것이므로 user는 'root일 것이다.

    - 그다음엔 각자 root의 비밀번호랑 db이름을 넣어서 실행하면 된다.

     

    2) 커서 생성

    - 일련의 데이터에 순차적으로 액세스 할 때 검색 및 현재 위치를 포함하는 데이터 요소이다.

    - 쉽게 말해 쿼리 결과를 가져오면서 여러 컬럼 중에서 특정 컬럼의 위치정보도 포함하고 있는 셈이다.

    cur = conn.cursor()

    - cursor( ) 대신 DictCursor( )도 사용할 수 있는데 각각 결과를 튜플/딕셔너리 형태로 받아온다.

     

     

    3) 입력 데이터 저장

    - 파이썬을 통해서 데이터베이스에 데이터를 저장했다면 임시로 저장된 상태이다.

    - 확실하게 데이터베이스에 정보를 업데이트하려면 'commit'을 해야 한다.

    conn.commit()

     

    3) 쿼리 실행 및 결과 반환

    - execute( ) 함수를 통해서 쿼리를 실행할 수 있다.

    - 쿼리 실행 후 결과는 fetch( )를 통해 가져올 수 있고 3가지 종류가 있다.

    ※ fetch( ) 종류

    메소드 설명
    fetchall( ) 쿼리 실행 결과 모든 데이터를 한 번에 가져옴
    fetchone( ) 쿼리 실행 결과 호출할 때마다 한 행만 가져옴
    fetchmany(n) 쿼리 실행 결과 n개 만큼의 데이터만 가져옴

    - 상황에 맞춰서 적절한 메소드를 선택하면 될 것 같다.

     

    3. pymysql 실습

    1) 데이터베이스 연결

    import pymysql 
     
    def dbconnect() : 
        conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8')
        return conn 
    
    def main():
        conn = dbconnect()  # DB 연결
        print('연결완료')
        conn.close()        # DB 연결 끊기 
        print('연결해제')
        
    if __name__=="__main__" :
        main()

    - 단순히 DB가 연결되고 끊기는 예제다.

     

    2) 데이터 조회

    import pymysql 
     
    def dbconnect() : 
        conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8')
        return conn 
    
    def search_data(conn):
        cur = conn.cursor()
        sql = 'SELECT * FROM 테이블'
        cur.execute(sql)
        results = cur.fetchall()
        print(results)
        
    def main():
        conn = dbconnect()  # DB 연결
        print('연결완료')
        search_data(conn)
        conn.close()        # DB 연결 끊기 
        print('연결해제')
        
    if __name__=="__main__" :
        main()

    - 간단하게 DB에 연결해서 테이블의 정보를 읽어와서 출력하는 예제다.

    - results에 fetchall( )을 사용했으므로 테이블의 모든 결과가 묶여서 results에 저장된다.

     

    3) 데이터 삽입

    import pymysql 
     
    def dbconnect() : 
        conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8')
        return conn 
    
    def insert_data(conn):
        cur = conn.cursor()
        name = input('등록할 사용자의 이름을 입력하세요.')
        year = input('등록할 사용자의 생년을 입력하세요.')
        addr = input('등록할 사용자의 주소를 입력하세요.')
        sql = "INSERT INTO 테이블 (name, birth_year, addr) VALUES('"+name+"', '"+year+"', '"+addr+"')"
        cur.execute(sql)
        conn.commit()
        
    def main():
        conn = dbconnect()  # DB 연결
        print('연결완료')
        insert_data(conn)
        conn.close()        # DB 연결 끊기 
        print('연결해제')
        
    if __name__=="__main__" :
        main()

    - 데이터를 삽입하는 예제다.

    - 데이터베이스의 정보에 변동을 주는 내용이므로 꼭 'commit'을 해준다.

     

    4) 데이터 삭제

    import pymysql 
     
    def dbconnect() : 
        conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8')
        return conn 
    
    def insert_data(conn):
        cur = conn.cursor()
        name = input("삭제할 사용자의 이름을 입력하세요 : ")
        cur.execute("SELECT user_id FROM 테이블 WHERE name = '"+name+"'")
        u_id = cur.fetchone()
        sql = "DELETE FROM 테이블 WHERE user_id = '"+u_id+"'"
        cur.execute(sql)
        conn.commit()
        
    def main():
        conn = dbconnect()  # DB 연결
        print('연결완료')
        insert_data(conn)
        conn.close()        # DB 연결 끊기 
        print('연결해제')
        
    if __name__=="__main__" :
        main()

    - 이름을 입력받아 그에 해당하는 유저 id(기본키)를 찾고 삭제하는 예제다.

    - 마찬가지로 DB에 변경 결과를 저장하므로 'commit'을 해준다.

     

     

    ※ 이 게시물은 '이것이 MySQL이다' 교재와 엔코아 플레이데이터에서 배운 내용을 토대로 작성되었습니다.

    댓글

Designed by Tistory.