-
Python 문법 기초 33 - MyriaDB 연동(명령어)Python 2022. 10. 22. 18:08
# 원격 데이터베이스 연동 프로그램 # 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. 충돌을 막기 위해서 사용
'Python' 카테고리의 다른 글
Python 문법 기초 34 - thread(자원공유, 활성화/비활성화) (0) 2022.10.23 MariaDB 연동 예제 (0) 2022.10.22 Python 문법 기초 32 - 개인용 DB : sqlite3 (0) 2022.10.22 Python 문법 기초 31 - file i/o (try ~ except) + pickle(import) (0) 2022.10.22 Python 문법 기초 30 - 예외처리(try ~ except) (0) 2022.10.22