python 에서 라이브러리 설치까지 끝냈다면, python과 mysql을 커넥션 해야한다.
먼저, mysql에서의 작업이 필요하다.
이미 관리자 계정이 있지만, 그것을 사용하지 않고, 데이터베이스 하나를 사용할 수 있도록 계정을 다시 만들겠다.
업무에 임할때 관리자 계정이 아닌, 위의 형태로 계정을 실무자가 받아서 하게끔 되어있다.
계정만드는 것은 현재 사용하고 있는 MySQL workbench에서 한다.
1
|
create user 'streamlit'@'%' identified by '1234' ;
|
cs |
create user '만들계정명'@'%' identified by '패스워드' ;
이런 형태를 띈다. 난 streamlit을 이용하기 위함이기 때문에 streamlit으로 만들었다.
그런 후에는 이 계정에 권한을 설정해야한다.
관리자는 모든 데이터베이스 , 테이블 다 관여를 할 수 있지만, 이렇게 만드는 계정은
권한을 다 줄 수 도 있지만, 제한적으로 주는 것이 가능하다.
1
|
grant all on yhdb.* to 'streamlit'@'%' ;
|
cs |
내가 사용할 데이터베이스의 이름은 yhdb 이다.
이 yhdb를 streamlit 계정이 사용할 수 있도록 할 것이기 때문에 위의 형태로 입력한다.
이제 파이썬에서 yhdb 데이터베이스로 커넥션을 해보겠다.
아래는 visual studio code 에서 작성하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import mysql.connector
from mysql.connector import Error
# 커넥션 과정에서 에러가 발생하는지 보기 위하여 try except 를 이용한다.
try :
# 커넥터로부터 커넥션을 받는다.
connection = mysql.connector.connect( host = '본인host', database = '데이터베이스 이름',
user = '유저name', password = '패스워드') if connection.is_connected() :
db_info = connection.get_server_info() # 서버의 info를 받아서 print로 확인하는 과정
print('MySQL server version : ', db_info )
# 커서를 가져온다.
cursor = connection.cursor() #커서로 실행을 한다.
# 내가 실행할 sql 문을 query 변수에 담았다. 이때 values 에 들어가야 하는
# 데이터는 %s 로 표현한다. query = '''insert into cats4(name, age)
values (%s, %s);'''
record =('냐웅이', 1 ) # 위의 %s 부분에 들어갈 데이터도 변수 처리해준다.
# 실행한다.
cursor.execute(query, record)
# record 부분을 변수 처리 말고 curs.execute(query, ('냐웅이', 1))도 되지만,
# 코드 수정시 번거롭다. #commit한다.
connection.commit()
print('{}개 적용됨'.format(cursor.rowcount)) #데이터가 적용 됐는지 확인 위한 print문
except Error as e :
print('db관련 에러 발생', e) # 여기까지의 과정에서 에러가 나는지 확인한다.
finally : #위의 커넥션과 insert가 잘 이루어졌으면 , 커서와 커넥션을 종료한다.
cursor.close()
connection.close()
print('MySQL 커넥션 종료')
|
cs |
위의 코드내용이 python 과 mysql을 커넥션하고 데이터를 insert 하는코드이다.
mysql.connector.connect( host = '본인host', database = '데이터베이스 이름',
user = '유저name', password = '패스워드')
이 부분에서 위의 계정정보와 같이 나는 host = 호스트정보,
database = 'yhdb'
user = streamlit
password = 1234 로 설정하였다.
그 후 순서로 보자면, 커넥션 되었을 경우!!
위의 코드가 실행된다.
위는 하나의 데이터를 insert 한다. 그렇다면 여러개의 데이터는 insert할 수 없을까. 할 수 있다.
아래는 여러개의 데이터를 insert 하는 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import mysql.connector
from mysql.connector import Error
# 커넥션 과정에서 에러가 발생하는지 보기 위하여 try except 를 이용한다.
try :
# 커넥터로부터 커넥션을 받는다.
connection = mysql.connector.connect( host = '본인host', database = '데이터베이스 이름',
user = '유저name', password = '패스워드')
if connection.is_connected() :
db_info = connection.get_server_info() # 서버의 info를 받아서 print로 확인하는 과정
print('MySQL server version : ', db_info )
# 커서를 가져온다.
cursor = connection.cursor() #커서로 실행을 한다.
# 내가 실행할 sql 문을 query 변수에 담았다. 이때 values 에 들어가야 하는
# 데이터는 %s 로 표현한다.
query = '''insert into cats4(name, age)
values (%s, %s);'''
record =[ ('냐웅이', 1 ), ('고양이', 3), ('살쾡이', 5) ]
# 위의 %s 부분에 들어갈 데이터도 변수 처리해준다. #여러개의 데이터는 리스트로 담아준다.
# 실행한다.
cursor.executemany(query, record) #execute가 아닌, executemany 로 사용한다.
# record 부분을 변수 처리 말고 curs.execute(query, ('냐웅이', 1))도 되지만,
# 코드 수정시 번거롭다.
#commit한다.
connection.commit()
print('{}개 적용됨'.format(cursor.rowcount)) #데이터가 적용 됐는지 확인 위한 print문
except Error as e :
print('db관련 에러 발생', e) # 여기까지의 과정에서 에러가 나는지 확인한다.
finally : #위의 커넥션과 insert가 잘 이루어졌으면 , 커서와 커넥션을 종료한다.
cursor.close()
connection.close()
print('MySQL 커넥션 종료')
|
cs |
|
|
위의 코드에서 두 군데를 수정하였다.
record 변수에 데이터 정보가 들어가는데 기존에 튜플형식으로 하나의 데이터를 넣었다면,
여러개의 튜플을 리스트로 묶어주고 변수에 넣는다.
그리고 이 변수를 실행한다.
실행할때 하나의 데이터 실행은 cursor.execute를 사용하였지만,
여러개는 cursor.executemany 로 사용한다.
위의 코드가 정상적으로 작동을 한다면,
streamlit에 활용할때는 ,
main()함수 안에 넣어 활용한다!
'IT 프로그래밍 관련 > Python MySQL connection' 카테고리의 다른 글
Python에서 MySQL 라이브러리 설치하기. (0) | 2021.03.18 |
---|
댓글