Post

오토에버 클라우드 2기 10일차

오토에버 클라우드 2기 10일차

python과 데이터베이스를 연동하는 방법에는 프로그래밍언어에 드라이버를 설치해서 직접 연동하는 방식과

프레임워크를 이용하는 방법이 있다 예를 들어서

SQL Mapper를 이용하는 방식 RDBMS에서 가능 예시로 MyBatis

ORM 형태를 이용하는 방식: RDBMS의 테이블을 프로그래밍 언어의 class와 매핑하고 데이터를 instance와 매핑 자바에서는 hibernate, 파이썬에서는 Django의 ORM 또는 SQLAlchemy

 

python과 MongoDB연동

9일차랑 동일 pip install pymogno 패키지 설치

 

MariaDB연동

pip install pyMySQL패키지 설치

접속 및 접속 해제

1
2
3
4
5
6
7
8
9
10
11
12
import pymysql

변수 = pymysql.connect(host='데이터베이스위치',port=포트번호,user='계정',passwd='비밀번호', db='데이터베이스이름',charset='인코딩방식')

변수.close()

import pymysql

connetion = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12134', db='new',charset='utf8mb4')
print(connetion) # <pymysql.connections.Connection object at 0x000001AC3BA81160>

connetion.close()

 

테스트 데이터 생성

use new;
create table usertbl(
	userid char(15) not null primary key,
	name varchar(20) not null,
	mobile char(100)
);
insert into usertbl values('ailee','에일리','12314'), ('hi','안녕','12314');

select * from usertbl;

 

DML 수행

연결 객체의 cursor 메서드를 호출해서 sql 실행 객체를 가져온다

sql실행객체.execute(sql문)

연결 객체에서 commit()을 호출하면 반영되고 rollback()을 호출하면 취소

1
2
3
4
5
6
7
8
9
10
11
12
import pymysql

connetion = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12134', db='new',charset='utf8mb4')
print(connetion)
#sql실행 객체 생성
cursor = connetion.cursor()

cursor.execute("insert into usertbl values('kim','민정','12314')")
connetion.commit() # 이부분이 없다면 반영되지 않는다
#파이썬 내부에서만 실행하고 db에는 적용 안되는것 같음

connetion.close()

 

조회

조회 함수는 fetchone과 fetchall이 있다 fetchone는 결과 집합 리턴 fetchall는 튜플을 리턴한다

cursor.fetchone()과cursor.fetchall()는 가장 최근에 실행된 SQL 문장의 결과를 가져오는 메서드다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pymysql

connetion = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='12134', db='new',charset='utf8mb4')
print(connetion)
#sql실행 객체 생성
cursor = connetion.cursor()

cursor.execute("select * from usertbl")
data = cursor.fetchone()
print(type(data))
print(data)

connetion.close()

#<pymysql.connections.Connection object at 0x000001E5DB121160>
#<class 'tuple'>
#('ailee', '에일리', '12314')

그래서 위코드에서 cursor.execute("select * from usertbl")없이 요청을 보내면 에러가 발생한다

 

DELIMITER와 프로시저

관계형 데이터베이스 사용하는 절차적 프로그래밍을 위한 개체

먼저 DELIMITER란

MariaDB에서 SQL 명령어는 기본적으로 세미콜론(;)으로 끝난다 그러나 프로시저, 트리거, 이벤트 등을 작성할 때는 여러 개의 명령문을 포함할 수 있으므로, 이를 하나의 블록으로 인식하도록 DELIMITER(구분자)를 변경해야 한다

1
2
3
4
5
6
7
delimiter //
create procedure myproc(vuserid char(15), vname varchar(20), vmobile char(100))

begin 
	insert into usertbl values(vuserid,vname,vmobile);
end //
delimiter ;

위 코드에서는 //를 새로운 명령어 구분자로 설정하여, 프로시저 내부에서 세미콜론(;)을 사용할 수 있도록 함 프로시저가 끝난 후 다시 기본 구분자인 ;로 변경해야 한다

 

프로시저란

프로시저는 미리 정의된 SQL 명령어의 집합으로, 이를 실행하면 저장된 여러 SQL 문이 한 번에 실행된다

  • 재사용 가능: 자주 사용하는 SQL 로직을 프로시저로 저장하여 필요할 때 실행 가능
  • 성능 향상: 클라이언트와 서버 간의 데이터 전송을 줄여 성능을 높일 수 있음
  • 파라미터 사용 가능: 입력 값에 따라 동적으로 실행 가능

 

This post is licensed under CC BY 4.0 by the author.