반응형

* 윈도우에서 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

+ Recent posts