Gom3rye

파이썬과 데이터베이스 연동 본문

현대 오토에버 클라우드 스쿨

파이썬과 데이터베이스 연동

Gom3rye 2025. 5. 20. 10:51

먼저 사용할 데이터베이스 서버를 확인하자. (Maria DB와 Mongo DB 모두 구동되어 있는지 확인)

데이터베이스 연동 방법

  1. 프로그래밍 언어에 드라이버를 설치해서 직접 연동하는 방식
  2. 프레임워크를 이용하는 방식
    • SQL Mapper를 이용하는 방식: RDBMS에서 가능, 대표적인 SQL Mapper가 Java의 MyBatis
    • ORM 형태를 이용하는 방식: RDBMS의 테이블을 프로그래밍 언어의 Class와 매핑하고 데이터를 Instance와 매핑하는 방식의 프레임워크로 Java에서는 Hibernate가 가장 유명하고 Python에서는 Django의 ORM이나 SQLAIchemy가 많이 사용된다.

Python과 Mongo DB 연동

  1. 필요한 드라이버 설치: 드라이버라고 하지 않고 패키지라는 표현을 많이 사용한다. → pymongo 패키지 설치: pip install pymongo
  2. Mongo DB 컬렉션 연결
from pymongo import MongoClient

# 데이터베이스 서버 연결
con = MongoClient('127.0.0.1', 27017) # 서벗 IP, 포트번호
# 데이터베이스 연결
hyundai = con.hyundai
# collection 연결 (만들기)
cars = hyundai.cars
  • 위는 데이터가 안 들어갔으므로 복사본 형태로만 hyundai(db), cars(colletion)가 있는 상태
cars.insert_one({'name':'그랜저', 'price':4000}) # 실제 데이터가 들어왔으므로 원본에도 생성
cars.insert_many([{'name':'소나타', 'price':2500},{'name':'제네시스', 'price':6000}])
  • 이제 몽고 db에서 show databases 하면 hyundai가 보인다.

데이터 조회

cursor = cars.find()
for car in cursor:
	print(car)
	
# 이름이 소나타인 데이터 조회
cursor = cars.find({'name':'소나타'})
for car in cursor:
	print(car)
	
# price가 3000이 넘는 데이터 조회
cursor= cars.find({'price': {'$gte':3000}})
for car in cursor:
    print(car)
# {'_id': ObjectId('6823e6f86bceeb7ee6270597'), 'name': '그랜저', 'price': 4000}
# {'_id': ObjectId('6823e6f86bceeb7ee6270599'), 'name': '제네시스', 'price': 6000}

데이터 수정 (update_one, update_many)

cars.update_many({'name':'소나타'}, {'$set': {'name':'sonata'}})

데이터 삭제

# 1. 가장 먼저 들어온 3개의 _id만 추출
first_three = cars.find().sort('_id', 1).limit(3)
ids_to_keep = [doc['_id'] for doc in first_three]
# 2. 나머지 (3개 이외) 문서 삭제
cars.delete_many({'_id': {'$nin': ids_to_keep}})

# 금액이 3000보다 큰 데이터 삭제
cars.delete_many({'price':{'$gte':3000}})

Python과 Maria DB 연동

몽고 디비와 동일한 방식으로 연동된다.

  1. 패키지 설치: pip install pyMySQL
  2. 접속 확인: import pymysql (접속 해제: 변수.close())
변수 = pymysql.connect( host='데이터베이스위치', 
		port=포트번호, 
	    user='계정',
		passwd='mysql 할 때 설정한 비밀번호', 
		db='데이터베이스이름', 
		charset='인코딩방식' )
         
import pymysql
con = pymysql.connect(
		host='127.0.0.1',
		port=3306,
		user='root',
		passwd='~~~~~', 
		db='autoever', 
		charset='utf8mb4')
				
print(con)
con.close()
  1. 연결
  • MariaDB 가서 create table~ 하면 되지만 일딴 있는 거 사용하겠다. (select * from usertbl;)
  1. DML수행
  • 과정
  • 연결 객체의 cursor 메서드를 호출해서 sql 실행 객체를 가져온다.
  • sql 실행 객체.execute(sql 문장)
  • 연결 객체에서 commit()을 호출하면 반영되고 rollback()을 호출하면 취소

데이터 삽입

# sql 실행 객체 생성
cursor = con.cursor()
# 삽입 실행 (statement 방식)
cursor.execute("insert into usertbl values('ljy', '이진연', 1970, '서울', '01012345678', '1970-10-31')")

con.commit()
con.close()

5. 조회

(조회할 땐 commit이 필요 없음)

  • fetchone: 하나의 데이터를 조회하는 함수- tuple 리턴
  • fetchall: 0개 이상의 데이터를 조회하는 함수- tuple의 tuple 리턴
# 조회 구문 실행
cursor.execute("select * from usertbl")

# 데이터 1개 가져오기
data = cursor.fetchone()
print(type(data)) 
# type 없으면 ('kty', '김태연', 1989, '전주', '01011111111', datetime.date(1989, 3, 9))
# type 넣었으니 결과는 <class 'tuple'>

(참고: 튜플은 데이터를 수정할 수 없다. list는 column, tuple은 row)

# 여러 개 가져오기
datas = cursor.fetchall()
for data in datas:
    print(data)

6. 프로시저

  • 관계형 데이터베이스(RDBMS)에서 사용하는, 절차적 프로그래밍을 위한 개체
  • 사용하는 이유
  • 보안: 개발자에게 데이터베이스 구조를 알려주지 않고 DML 작업이 가능하도록 한다.
  • 속도: 프로시저랑 뷰는 캐싱을 하기 때문에 속도가 빨라진다. (뷰랑 프로시저는 한 번 불러들이면 Main Memory에 저장되어 있는다.)
DELIMITER //
create procedure myproc(
	vuserid char(15), 
	vname varchar(20), 
	vbirthyear int(11), 
	vaddr char(100), 
	vmobile char(11), 
	vmdate date)
begin
	insert into usertbl 
	values(vuserid, vname, vbirthyear, vaddr, vmobile, vmdate);
end //
DELIMITER ;

# 사용 방법
call myproc('BoA', '권보아', 1986, '남양주', '01012345678', '1986-11-05');
select * from usertbl;
  • 프로시저 호출하면 begin절이 수행된다.

728x90
반응형

'현대 오토에버 클라우드 스쿨' 카테고리의 다른 글

Linux  (0) 2025.05.20
Linux  (0) 2025.05.20
Mongo DB  (0) 2025.05.20
데이터베이스  (2) 2025.05.20
데이터베이스  (1) 2025.05.20