* 윈도우에서 python용 MySql(MariaDB) 드라이버 설치 방법 버전별 드라이버 다운로드 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 사이트에서 mysqlclient 로 검색하여 원하는 파일( mysqlclient-1..-cp3*-cp3*m-win_amd64.whl )을 다운로드하면 된다. 확장자를 zip으로 변경하고 압축을 풀어준다. 풀린 파일과 폴더들을 복사한 후 C:\Python3*\Lib\site-packages 에 붙여넣기 하면 된다. 또는 pip install ... 해주면 된다. |
이클립스에서 MariaDB를 연결하는 방법은 다음과 같습니다.
방법 1.
conn = MySQLdb.connect(host = '127.0.0.1', user = '사용자이름', password='비밀번호', database='DB명')
ex)
conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', password='123', database='test')
또는 다음과 같이 작성해주시면됩니다.
config = {
'host':'127.0.0.1',
'user':'사용자이름',
'password':'비밀번호',
'database':'DB명',
'port':3306,
'charset':'utf8',
'use_unicode':True
}
ex)
config = {
'host':'127.0.0.1',
'user':'root',
'password':'123',
'database':'test',
'port':3306,
'charset':'utf8',
'use_unicode':True
}
이번에는 제가 만든 테이블에 데이터를 삽입하고 결과를 출력해보겠습니다.
table prac
CREATE TABLE prac(num INT(255) NOT NULL PRIMARY KEY,
NAME VARCHAR(20),
HOUR INT(11),
pay INT(11))
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
위 DB연결 코드 밑에 데이터 삽입 SQL문을 넣고 결과를 보겠습니다
try:
conn = MySQLdb.connect(**config)
print(conn) # DB가 잘 연결되었는지 확인
cursor = conn.cursor() # SQL문 수행을 위한 커서 객체 생성
except Exception as e:
print('err : ', e)
finally:
cursor.close()
conn.close()
# print(conn) 의 출력 결과
<_mysql.connection open to '127.0.0.1' at 0000025181F6F578>
try문 내의 코드는 다음과 같습니다.
- import MySQLdb 를 하여 MySQLdb 모듈을 불러옵니다.
- MySQLdb.connect(**config) 메소드를 통하여 MySQL에 연결해줍니다. 호스트명, 사용자명, 암호, 접속할 DB, 포트, 등을 기재합니다.
- DB 접속이 성공하면, Connection 객체로부터 cursor() 메서드를 호출하여 Cursor 객체를 가져옵니다.
- cursor 객체를 생성하였다면 이제 이 객체로 SQL의 DML 명령어들을 다 수행할 수 있습니다.
이제 자료를 추가하고 수정하고 삭제하는 DML 명령어들을 작성해보겠습니다.
지금부터 작성되는 내용들은 try ~ except 안에 추가로 작성해주시면됩니다.
1. 자료 추가 ( insert ) , 자료 조회 ( select )
방법 1.
# 자료 추가
sql = "insert into prac(num, NAME, HOUR, pay) values (1, '홍길동',3,8000)"
cursor.execute(sql) # 결과가 1이면 commit한다 아니면 rollback execute에 사실 리턴값이 존재
conn.commit()
#select 전체자료 읽기
sql = 'select * from prac'
cursor.execute(sql)
# 출력1 튜플 타입으로 출력된다
for data in cursor.fetchall():
print(data)
# 출력결과
(1, '홍길동', 3, 8000)
insert 문을 사용하여 각각의 컬럼에 맞게 값들을 입력해주었습니다.
이후 cursor객체에 execute를 사용해 실행할 sql문이 들어있는 변수를 입력해줍니다.
그 후 commit() 과정을 해주어야 합니다.
그 이유는 Autocommit 이 아니기때문입니다. 자동으로 commit 실행을 하고싶다면, connect() 메서드 호출시 autocommit=True 를 지정해줍니다.
insert문이 잘 실행되었는지 보기 위해 select 문도 작성하고, 반복문 for을 통해 데이터가 잘 삽입 되었는지 출력해보았습니다.
이번에는 다른 방법으로 insert 문과 select문을 사용해보겠습니다.
방법 2.
sql = "insert into prac values(%s,%s,%s,%s)" # 자바는 values에 ?가 들어감
sql_data = (2, 'insert2','5', 9000)
cursor.execute(sql, sql_data)
conn.commit()
# 출력 2
# 반복문 for에 cursor 객체 값들을 r에 넣고 출력
# list로 출력
for r in cursor:
# 배열에 저장되는 값들은 다음과 같습니다.
print([r[0], r[1], r[2], r[3]]) # r[0] = num값 r[1] name값 r[2] HOUr값 r[3] pay값 저장
# 출력 결과
[1, '홍길동', 3, 8000]
[2, 'insert2', 5, 9000]
방법 3.
sql = "insert into prac values(%s,%s,%s,%s)" # 자바는 values에 ?가 들어감
sql_data = '3','insert3',5,6000
cursor.execute(sql, sql_data)
conn.commit()
# 출력 3
# 이번에는 매핑을 이용하여 서로 값이 일치하게 저장되도록 합니다.
for (num, NAME, HOUR, pay) in cursor:
print(num, NAME, HOUR, pay)
print()
# 출력4
for (a, b, c, d) in cursor: # 매핑한거라 값은 같게 출력
print(a, b, c, d)
# 출력 결과
1 홍길동 3 8000
2 insert2 5 9000
3 insert3 5 6000
1 홍길동 3 8000
2 insert2 5 9000
3 insert3 5 6000
update / delete 문 사용 후 출력 방식은 출력 1에서 사용한 방법으로 출력하도록 하겠습니다.
2. UPDATE
# 자료 수정
sql = "update prac set NAME = %s, HOUR=%s, pay=%s where num=%s"
sql_data = ('홍씨에서이씨', 5, 10000, 1)
cursor.execute(sql, sql_data)
conn.commit()
#select 전체자료 읽기
sql = 'select * from prac'
cursor.execute(sql)
# 출력1
for data in cursor.fetchall():
print(data)
# 출력 결과
(1, '홍씨에서이씨', 5, 10000)
(2, 'insert2', 5, 9000)
(3, 'insert3', 5, 6000)
3. DELETE
방법 1)
# 자료 삭제
num = '1'
sql = "delete from prac where num = " + num #권장x
cursor.execute(sql)
conn.commit()
# 출력 결과
(2, 'insert2', 5, 9000)
(3, 'insert3', 5, 6000)
방법 2)
num = '2'
sql = "delete from prac where num='{0}'".format(num)
cursor.execute(sql)
conn.commit()
# 출력 결과
(3, 'insert3', 5, 6000)
방법 3)
num = '3'
sql = "delete from prac where num=%s" #가장많이 쓰는 방법 밑에 cursor와 매핑 할땐 튜플형태로 줘라
cursor.execute(sql, (num, ))
conn.commit()
# 출력 결과
참고사이트
https://cafe.daum.net/flowlife
'python' 카테고리의 다른 글
[python] Numpy 데이터타입, 메모리저장, 배열 (0) | 2020.05.28 |
---|---|
python - Thread ( 스레드 ) (1) (0) | 2020.05.14 |
python - 예외처리 (0) | 2020.05.11 |
python - OS & pickle (0) | 2020.05.11 |
python - 상속 (2) (0) | 2020.05.10 |