Python 문법 기초 33 - MyriaDB 연동(명령어)
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