Fund. 28 - SQL 사용하여 DB 다루기

나융·2021년 11월 15일
0

aiffel

목록 보기
11/12

Python Database API

  1. DB를 연결한다
  2. SQL문을 실행한다
  3. DB 연결을 닫는다
  • 주요 함수: connect(), close(), commit(), rollback()
    PEP 249

SQL lite

큰 데이터들을 다루다보니 데이터베이스에서의 작업도 얼마나중요한지 생각해보게 되었다.
추후 프로젝트에서 사용해보면 어떨까? 사용법 대략 기억하기위해서 기록

  • 데이터 베이스에 연결하는 객체를 선언한다
import sqlite3   # SQLite 인터페이스 파이썬 표준 라이브러리
import os

db_path = os.getenv("HOME") + '/mydb.db'
conn = sqlite3.connect(db_path)
print(conn)

DB 핸들링 시나리오

  • cursor는 QUERY를 수행하고 결과를 얻는데 사용하는 객체다(습관적으로 사용해도 좋음)
c = conn.cursor()
print(c)

# stocks 이름의 테이블 생성
c.execute("CREATE TABLE IF NOT EXISTS stocks (date text, trans text, symbol text, qty real, price real)")

# stocks 테이블에 데이터 하나를 삽입
c.execute("INSERT INTO stacks VALUES ('20200701', 'TEST', 'AIFFEL', 1, 10000)")

# 삽입한 데이터를 조회
c.execute("SELECT * FROM stocks")

# 조회된 내역을 커서를 통해 가져와 출력
print(c.fetchone())

함수 conn.commit()

  • DB를 실제로 업데이트
  • transaction 관리
conn.commit()

# 종료 프로세스
c.close()   # 커서를 먼저 닫고,
conn.close()  # DB 연결을 닫아준다.

쿼리 기본 구조

  • SELECT
  • FROM
  • WHERE
  • GROUP BY
  • ORDER BY
  • LIMIT 숫자

    말하는거랑 생각보다 비슷하네??
    언어 개발자들은 참 똑똑해(얼마나 고생했으면ㅜ)

WHERE 조건문

  1. 특정 문자열을 포함하는 row를 가져옴
SELECT * FROM 도서대출내역2 
WHERE 이름 LIKE "문%" ;
  1. 특정 기간 혹은 특정 날짜 이전,이후
SELECT * FROM 도서대출내역
WHERE 대출일 >= "2020-06-01" 
AND 대출일 <= "2020-06-07" ;

SELECT * FROM 도서대출내역
WHERE 대출일 BETWEEN "2020-06-01" AND "2020-06-07" ;
  1. NULL 조건 다루기
SELECT * FROM 도서대출내역
WHERE 반납일 IS NOT NULL;

JOIN

중첩 질의 Nested Query

  • 선행 쿼리의 결과로부터 다시 쿼리를 수행하는 구조
query = '''
SELECT C.이름, COUNT(*) 대출건수
FROM (
	SELECT A.*, B.도서명 
	FROM 대출내역 AS A 
	LEFT JOIN 도서명 AS B
	ON A.도서ID = B.도서ID ) C
GROUP BY C.이름;
'''
for row in c.execute(query):
  print(row)

IFNULL()

CASE

SELECT 이름,
CASE WHEN condition > 5
	THEN A
	ELSE B

작업 도중 틈틈히 확인하면서 익힐 수 있도록


새롭게 알게 된 것들

  • SQL은 해봐야지 생각만 하고 있다가, 직접 접해보는것은 처음인데 꽤 익숙한 느낌이 들었다
  • 역시 한 가지의 언어로는 제약되는 것이 많아 다양하게 익히는 것이 필요할 것 같다(마르코형님이 이야기했던대로 연봉도 올라가겠지?)
  • 자주 사용하는 라이브러리의 요악 or cheet sheet 를 만들어두는 것이 자주 도움이 될 것 같다

한 주의 회고

  • 딥한 내용들이 계속이어져서 체력적으로 조금 지치는 느낌.
  • 언제고 다시 참고해 쓸만한 내용들이 즐비하게 나오고 있어 충실한 느낌
  • 두 가지 느낌이 섞여서 다짐을 해보지만

다음 주의 다짐

  • 혼자 일을 하는 것보다, 함께 했을 때 더 멀리 간다는 말이 자주 떠오른다 여러가지 시도해보고 싶은것들이 생겨남
  • 개발 분야의 일은 개발 자체도 중요하지만 일상의 리듬을 확보하는 일이 굉장히 큰 영향을 미친다는걸 꺠달음
  • 나 스스로 정리하고 갈무리하는 작업이 중요해졌기 떄문에, 이쪽에 좀더 집중해야겠다
profile
딥러닝 한발짝

0개의 댓글