ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 문법 기초 33 - MyriaDB 연동(명령어)
    Python 2022. 10. 22. 18:08

     

     

     

    MySql / Mariadb 연동하기(윈도우)

    * 윈도우에서 python용 MySql(MariaDB) 드라이버 설치 방법버전별 드라이버 다운로드 http://www.lfd.uci.edu/~gohlke/pythonlibs/사이트에서mysqlclient로 검색하여 원하는 파일(mysqlclient-1..-cp3*-cp3*m-win_amd64.whl)을 다

    cafe.daum.net

     

    # 원격 데이터베이스 연동 프로그램
    # pip install mysqlclient
    import MySQLdb
    
    conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', password='123', database='test')
    print(conn)
    conn.close()
    
    
    <console>
    <_mysql.connection open to '127.0.0.1' at 000001BB702A6F50>

     

    # sangdata table과 연동
    config = {
        'host':'127.0.0.1',
        'user':'root',
        'password':'비밀번호 입력',
        'database':'test',
        'port':3306,
        'charset':'utf8',
        'use_unicode':True
    }
    
    try:
        conn = MySQLdb.connect(**config) # * 한 개일 경우 touple 없는 경우 하나의 값, 두 개일 경우 doct
        # print(conn)
        
    except Exception as e:
        print('err : ', e)

    패킹연산자

       *가 한 개일 경우 touple, 두 개일 경우 doct 타입이다.

       *가 없는 경우 하나의 값이 들어간다.

     

     

    DB 값 호출 방법 1

    try:
        conn = MySQLdb.connect(**config) # * 한 개일 경우 touple 없는 경우 하나의 값, 두 개일 경우 doct
        # print(conn)
        cursor = conn.cursor()
        
        # select
        sql = "select code as 코드, sang, su, dan from sangdata"
        cursor.execute(sql)
        
        # 방법1
        for data in cursor.fetchall():
            # print(data)
            print('%s %s %s %s'%data)
        
    except Exception as e:
        print('err : ', e)
    finally:
        cursor.close()
        conn.close()
    
    
    <console>
    (1, '장갑', 3, 10000)
    (2, '벙어리장갑', 2, 12000)
    (3, '가죽장갑', 10, 50000)
    (4, '가죽점퍼', 5, 650000)
    
    1 장갑 3 10000
    2 벙어리장갑 2 12000
    3 가죽장갑 10 50000
    4 가죽점퍼 5 650000

    for 문을 돌려 data 값을 순서대로 호출한다. tuple 타입으로 호출 print(data)

    for 문을 돌려 %s(문자열)을 호출 컬럼 갯수에 따라 작성뒤 %data를 하면 그 갯수만큼 호출된다.

     

     

    DB 값 호출 방법 2

    # 방법2
        for r in cursor:
            # print(r)
            print(r[0], r[1], r[2], r[3])

     

    DB 값 호출 방법 3

    for(code,sang,su,dan) in cursor:
    print(code,sang,su,dan)

     

    DB 값 호출 방법 3-1

    for (a,품명,su,kks) in cursor:
    print(a,품명,su,kks)

    위의 변수명은 컬럼명이 아니라 변수명이기 때문에 굳이 칼럼명으로 작성하지 않아도 된다.

     

     

    insert 방법

    # insert
        sql = "insert into sangdata(code,sang,su,dan) values(10,'신상1',5,5000)"
        cursor.execute(sql)
        conn.commit()
    
    
    <console>
    1 장갑 3 10000
    2 벙어리장갑 2 12000
    3 가죽장갑 10 50000
    4 가죽점퍼 5 650000
    10 신상1 5 5000

    java와 다르게 insert 문과 select 문은 과정이 같다. cursor.execute(sql)

    반드시 commit()을 해야된다. commit을 하지 않으면 반영이 되지 않는다. 한번 더 실행시키면 에러 발생!

     

    err : (1062, "Duplicate entry '10' for key 'PRIMARY'")

    primary key 이기때문에 중복 데이터 허용 안 된다.

     

     

    insert 방법2

    sql = "insert into sangdata values(%s,%s,%s,%s)"
    sql_data = '11','아아',12,5500
    cursor.execute(sql, sql_data)
    conn.commit()
    
    
    <console>
    1 장갑 3 10000
    2 벙어리장갑 2 12000
    3 가죽장갑 10 50000
    4 가죽점퍼 5 650000
    10 신상1 5 5000
    11 아아 12 5500

    sql 에서 컬럼 갯수와 들어가는 값이 같으면 생략 가능하다.

    java와 다르게 파이썬에서는 입력할 값을 ?로 주는 것이 아닌 %s로 입력해야 된다.

     

     

    sql = "insert into sangdata values(%s,%s,%s,%s)"
    sql_data = '11','아아',12,5500
    count = cursor.execute(sql, sql_data)
    print(count)
    conn.commit()

    insert는 여러개 insert 할 수 없다. 한번에 1개만 insert 가능하다.

    count 변수명을 주어 1이 나오면 insert 가 된 것이고 0이 나오면 실패로 분류할 수 있다.

     

     

    update 방법

    # update
        sql = "update sangdata set sang=%s, su=%s where code=%s"
        sql_data = ('파이썬',50,11)
        count = cursor.execute(sql, sql_data)
        print(count)
        conn.commit()
    
    
    <console>
    1 // count
    1 장갑 3 10000
    2 벙어리장갑 2 12000
    3 가죽장갑 10 50000
    4 가죽점퍼 5 650000
    10 신상1 5 5000
    11 파이썬 50 5500

     

     

    delete 방법(안 좋은 예)

    # delete
        code = '10'
        sql = "delete from sangdata where code=" + code
        cursor.execute(sql)
        conn.commit()

    delete 절대 이렇게 하면 안 된다. 해킹 당하기 딱 좋다. 

    또한 시큐어 코딩(secure coding) 가이드 라인에 위배된다.

     

     

    시큐어 코딩(secure coding)

    소프트웨어(SW)를 개발함에 있어 개발자의 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는 보안취약점(vulnerability)을 배제하기 위한 코딩 기법을 뜻 한다.

     

     

    delete 추천 방법 1,2

    # delete
        code = '11'
        # sql = "delete from sangdata where code='{}'".format(code) # 추천
        sql = "delete from sangdata where code=%s" # 추천
        cursor.execute(sql, (code,))
        
        conn.commit()

     

     

    트랜지션

    1. 충돌을 막기 위해서 사용

     

    트랜잭션(Transaction)이란?

    트랜잭션이란? 트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 데이터베이스의 상태를 변화시킨다는 것은 무얼 의미하는 것일

    mommoo.tistory.com

     

     

    댓글

Designed by Tistory.