Python

Python 문법 기초 33 - MyriaDB 연동(명령어)

코딩탕탕 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