본문 바로가기
관/핫한 파이썬 공부

파이썬의 여러 모듈 공부하기 10.

by 4차원 박스 2019. 12. 17.

DBMS에서 기본으로 제공해주는건 SQL 이다
SQL이 기본이기 때문이다.

mysql이 기본으로 제공해주는 데이터베이스를 알아보려면
-u root mysql 로 확인 가능하다.


grant all privileges on dbname.* to ‘사용자’@’localhost’;  이거로 db에 권한을 부여할 수 있다.
mysql> use dbname; 이것이 중요함 db이름 안쓰면 오류난다


이번엔 mysql로 db를 하나 만들고 파이썬에서 이를 불러오는 연습을 해본다.

유저 데이터베이스 베이스안에 테이블 만드는 방식으로 생성하기

순서는 다음과 같다.

커서의 역할은 : 베이스에 접근하는 트럭같은것으로 이해하기
커서를 어디로 접근할지 정해주고
커서를 실행시킨다.

불러오는 방식은 파이썬의 딕셔너리 형식도 여러가지 형식도 있다.

다음 코드는 mysql에서 db를 만드는 과정이다.

mysql> create user 'test'@'localhost' identified by 'test'; #앞은 유저이름이고 by로 나오느는것은 비밀번호이다.
mysql> create database testDB;
mysql> grant all privileges on testDB.*to 'test'@'localhost';
mysql> use testdb;
Database changed
mysql> create table myDB(name text not null, age int, address char(50));
mysql> insert into myDB values('hong',10,'gangnam');
mysql> insert into myDB values('park',20,'sinlim');

유저 = test 이고
db= testDB인데 testdb로 (대소문자 구분안한다)
테이블= myDB 이다. (대소문자 구분안한다)

이렇게 만든 db를 파이썬으로 불러온다. 다음과 같다.

conn = pymysql.connect(host='localhost',user='test',password='test',db='testdb',charset='utf8')
curs = conn.cursor(pymysql.cursors.DictCursor)
sql = "select * from mydb"
curs.execute(sql)

rows = curs.fetchall()

for row in rows: #딕셔너리 형식으로 불러온다
    print(row)

for row in rows: #딕셔너리가 아니라 띄어쓰기로 구분이 된다
    print(row['name'],row['age'],row['address'])
    
conn.close()

실행하면

{'name': 'hong', 'age': 10, 'address': 'gangnam'}
{'name': 'park', 'age': 20, 'address': 'sinlim'}
hong 10 gangnam
park 20 sinlim

이렇게 나온다.



이번엔 db를 불러오는 방식에서 살짝 변형하여
sql문을 바꾼다. 이를통해 파이썬에서 테이블을 조작하는 방식으로 한다.
아까와의 차이점은 직접 db로 접근하여 값을 넣는것이고
아까했던것은 select로 불러오는것 이었다.

commit()으로 db에확실히 저장한다는 개념으로 알아둔다.


이번엔 데이터를 업데이트와 딜리트 하는것임


업데이트 부터 보자.

conn = pymysql.connect(host='localhost',user='test',password='test',db='testdb',charset='utf8')
curs= conn.cursor()
sql="""insert into mydb(name,age,address) values (%s, %d, %s)"""  #%d 하면 오류가 난다 %s로 하면 되긴 함.
curs.execute(sql, ('kim',21,'sindolim'))
curs.execute(sql,('lee',22,'donglae'))

#다음건 리스트나 튜플로 한번에 처리하는법
data=(('park', 30 , 'namhae'),('song',29,'newyork'),('cha',22,'china'))
curs.executemany(sql,data)
conn.commit()
rows=curs.fetchall()   
conn.close()


이번엔 딜리트를 해본다.

conn = pymysql.connect(host='localhost',user='test',password='test',db='testdb',charset='utf8')
curs= conn.cursor()

sql="""update mydb set age=30 where name='park' """ #park의 나이를 30으로 모두 바꿈
curs.execute(sql)

sql="delete from mydb where name=%s" #lee라는 이름 의 정보 지우기
curs.execute(sql,'lee') 

conn.commit()
conn.close()

이렇게 할수 있다.


pip오류날때 참고 브로그 개꿀팁
https://blog.naver.com/PostView.nhn?blogId=pororist&logNo=221347611524&parentCategoryNo=&categoryNo=28&viewDate=&isShowPopularPosts=true&from=search
이거 하면 싹 다된다.

키워드: '유용한 파이썬 모듈 pip'까지 검색하면 나온다.

또다른 꿀팁 mysql로 db만들고 테이블 내용 확인 바로 하는법
select * from 테이블이름(여기선 mydb);  즉
select * from mydb; 
를 쳐준다
mysql> select * from mydb;
+------+------+----------+
| name | age  | address  |
+------+------+----------+
| hong |   10 | gangnam  |
| park |   30 | sinlim   |
| kim  |   21 | sindolim |
| park |   30 | namhae   |
| song |   29 | newyork  |
| cha  |   22 | china    |
| kim  |   21 | sindolim |
| park |   30 | namhae   |
| song |   29 | newyork  |
| cha  |   22 | china    |
| kim  |   21 | sindolim |
| park |   30 | namhae   |
| song |   29 | newyork  |
| cha  |   22 | china    |
+------+------+----------+
 
이래 나온다.


이번엔 완전히 파이썬에서 db를 만들어본다.(이거로 gui와 연동이 가능해 진다.)
유저와 db와 테이블 까지 만들어서 gui와 연동하는것이 최종목표이다.

cmd에 mysql의 경로를 만들어주고 한다.
(c에 있는 mysql 의 bin으로 들어가본다.)

1. 유저와 db만들어 보기

import pymysql as mysql 

DB = 'samdb' 
 
# unpack dictionary credentials  
conn = mysql.connect(host='localhost', user='root', password='mysql', charset='utf8')
 
cursor = conn.cursor() 
 
try: 
    cursor.execute("CREATE DATABASE {} DEFAULT CHARACTER SET 'utf8'".format(DB)) 
    cursor.execute("GRANT ALL PRIVILEGES ON {}.* TO 'test'@'localhost'".format(DB))
 
except mysql.Error as err:                                         
    print("Failed to create DB: {}".format(err)) 
 
print("completed")
conn.close() 

이거로 만들고
cmd에서 유저 root와 test를 
mysql> create user 'test'@'localhost' identified by 'test'; #앞은 유저이름이고 by로 나오느는것은 비밀번호이다.
이거를 통해 만들어 보고 실행한다.

실행시키면 맨처음에 실행이 안되면 
루트 cmd창에서 권한을 직접 준다
GRANT ALL PRIVILEGES ON samdb.* TO 'test'@'localhost'; 를 통해
루트에서 samdb가 만들어진다.

 

다음건 다음 포스팅에 이어서 한다.

댓글