ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python에서 mysql db 사용하기
    프로그래밍/python 2022. 9. 13. 15:45
    반응형

     

     

    pymysql이 설치가 안되어있다면 pip install pymysql 로 설치를 한다. 

     

     

    #pip install pymysql
    import pymysql
    
    conn = pymysql.connect(host='localhost', user='아이디', password='암호',
    
                           db='디비이름', charset='utf8')

     

     

    클라이언트의 charset이 제대로 명시되어 있지 않을 경우 한글이 깨질 수 있다. 

     

     

    # SQL문 실행
    sql = "SELECT * FROM `테이블이름` limit 10"
    
    with conn:
        with conn.cursor() as cur:
            cur.execute(sql)
            result = cur.fetchall()
            for data in result:
                print(data)
                print(data[0]) #123123

     

    print(rows) 문은 전체 row들을 Tuple의 Tuple로서 출력하게 되고, row[0], row[1]와 같이 인덱스를 지정하면, 첫번째, 두번째 row 등을 가리키게 된다.

     

    각 row는 Tuple로 리턴되며, 컬럼 순서대로 데이터가 표시된다

     

    (123123, None, 1234, '필드', ..., datetime.datetime(2017, 3, 21, 16, 8, 1), ... None)

     

    이러한 디폴트 Row 데이타 형식을 흔히 Array based cursor라 부르고, 이는 connect() 혹은 cursor() 메서드에서 옵션으로 변경할 수 있다. 

     

    아래는 옵션으로 pymysql.corsors.DictCursor를 사용하여 Row 결과를 Dictionary 형태로 리턴한다.

     

    with conn:
        # Connection 으로부터 Dictoionary Cursor 생성
        with conn.cursor(pymysql.cursors.DictCursor) as cur:
            cur.execute(sql)
            result = cur.fetchall()
            for data in result:
                print(data)
                print(row['id'], row['field1'], row['field2'])

     

    디폴트 Array based cursor는 Row의 결과값을 배열로 (PyMysql에서 정확히는 튜플) 리턴하는데, cursor 생성시 DictCursor 옵션을 주면, Row 결과를 Dictionary 형태로 리턴한다.

    또한 Row 데이타가 Dictionary이므로 row["id"], row["name"] 과 같이 컬럼명을 써서 컬럼값을 구할 수 있다. 이렇게 컬럼인덱스 대신 컬럼명으로 컬럼을 찾게 되면 코드 가독성을 높일 수 있고, 특히 컬럼수가 많을 경우 유용하게 사용될 수 있다.

    {'id': 123123, 'field1': None, ... ,  'field2': None}

     

     

     

     

     

     

     

    참고: http://pythonstudy.xyz/python/article/202-MySQL-%EC%BF%BC%EB%A6%AC

     

    728x90
    반응형
Designed by Tistory.