cd {} : {} 으로 이동
ls : 현재 위치에 어떤 파일이 있는지
pwd : 현재 위치 정보
touch {파일 이름.확장자} : {} 파일 생성 ex. new_file.db / new_file.pygit clone https://github.com/{github_id}/ds-sa-simple-git-flow
git add .
git commit -m '메시지'
git push origin mainconda deactivate
conda create -n ds-sa-simple-git-flow python=3.8pip list
In-Memory
: 파이썬에서 프로그램을 다룰 때에는 프로그램이 실행될 때에만 존재하는 데이터가 있음
-> 프로그램 실행이 종료되면 사용하던 데이터도 같이 없어짐
File I/O
: 파일을 읽어오는 방식으로 작동하는 형태, 엑셀 시트나 CSV와 같은 형태는 파일을 매번 읽어와야 하고 파일이 손상되거나 여러 개의 파일을 동시에 다뤄야 하는 등 복잡하고 데이터량이 많아질수록 힘들어짐
관계형 데이터베이스
: 하나의 CSV파일이나 엑셀시트를 한 개의 테이블로 저장할 수 있고 한번에 여러 개의 테이블을 가질 수 있어SQL
을 활용해 데이터를 가져오기 수월
SQL JOIN
문법 작성 순서 & 실행 순서
# 작성 순서
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
# 실행 순서
FROM
ON
JOIN
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
DataBase를 왜 써야할까?
- 데이터 단위로 작업가능
- 동시에 접근하는 경우 훼손되지 않음
기본키와 외래키는 무엇일까?
- 기본키 : 테이블의 기준이 되는 키(유니크한 값을 가짐, Null 값은 안됨, 다른 테이블에서 외래키가 될 수 있음)
- 외래키 : 두 개의 테이블을 연결해주는 다리 (외래 테이블에서 기본키여야 함 - join을 했을 때 하나의 결과만 가져올 수 있어야함)
keyword
- 데이터 : 각 항목에 저장되는 값
- 테이블 (혹은 relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터 = 엔티티
- 필드 (혹은 column) : 테이블의 열
- 레코드 (혹은 tuple) : 테이블의 한 행의 저장된 정보 = instance
- 키 : 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유값이어야 하며 기본키 (primary key) 와 외래키 (foreign key) 등이 있을 수 있음
- ERD : 사전적으로 정리한 것 ( =! 스키마)
1:1 관계
테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결되어 있는 경우
한 개의 전화번호당 한 명의 유저를 가지고 그 반대도 동일
1:N 관계
테이블의 레코드 하나당 여러 개의 레코드와 연결되어 있는 경우
가장 흔하게 사용되는 관계
한 유저가 여러 전화번호를 가질 수 있지만 반대는 성립 X = 한 전화번호는 한명의 유저만
N:N 관계
여러 개의 레코드가 여러 개의 레코드를 가지는 관계
조인 테이블
을 만들어 관리
양방향에서 다수를 가질 수 있는 경우
한 고객은 여러 개의 여행상품을 가질 수 있고 한 여행 상품 또한 여러 개의 고객을 가질 수 있음
자기참조 관계(Self referencing relationship)
한 유저당 하나의 추천인을 가질 수 있음 하지만 추천인 입장에서는 여러 개의 유저를 가질수 있음 = 복수 추천 가능
데이터 모델링을 한다 = 스키마를 짠다
트랜잭션
COMMIT
트랜잭션은 확정 신호를 알려줘야 데이터베이스에 반영
확정신호를 보내지 않으면 데이터베이스 내용에 변화X
확정신호 = COMMITROOLLBACK
COMMIT 과 반대 개념
앞으로 변경될 작업에 대한 내용을 취소한다는 의미
= 트랜잭션 수행 중에 지금까지 수행한 내용을 모두 취소하겠다
Atomicity 원자성
하나의 트랜잭션을 구성하는 작업들은 전부 성공하거나 전부 실패야한 함
Consistency 상태 일관성
하나의 트랜잭션 이전과 이후 데이터베이스 상태는 이전과 같이 유효해야 함 = 데이터베이스의 제약이나 규칙에 의거한 데이터베이스여야 함
Isolation 고립성
하나의 트랜잭션이 다른 트랜잭션과 독립되어야 함 = 동시에 실행될 때와 연속으로 실행될 때의 데이터베이스 상태가 동일해야 함
Durability 지속성
하나의 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 로그가 남고 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 함
GROUP BY
분할 -> 적용(집계연산) -> 결합
WHERE vs HAVING
WHERE 은 GROUP BY 전에 실행되기 때문에 집계연산이 안됨정규화
테이블을 효율적으로 구성하는 법
제1정규화 ~ 제5정규화 , 반정규화
보통 제3정규화까지 함
https://mr-dan.tistory.com/10
DBeaver
실행 : cursor,SQL
실행 : connection
서비스://유저_이름:유저_비밀번호@호스트:포트번호/경로
- DB API 를 왜 쓸까?
데이터베이스의 데이터를 활용하기 위해서
- 파이썬과 데이터베이스를 연결하기 위해서는 어떤 메스드를 사용해야 할까?
connect
세션을 열면 바로 쿼리를 날릴 수 있을까?
connect 메소드로 연결을 한다 = 세션을 열었다
connect
은 데이터베이스와 연결된 하나의 세션을 보관
해당 세션을 통해 데이터베이스와 소통하기 위한cursor
를 만들어 쿼리를 날림쿼리를 날리려면 어떤 메소드를 사용해야 할까?
cursor.execute
- 클라우드 데이터베이스란 무엇일까?
클라우드 서비스를 사용하는 데이터베이스
- 클라우드 데이터베이스는 왜 사용할까?
외부의 접근성이 높고 관리비용이 낮음, 어디로든 확장가능, 유지비용 낮음
BUT 보안문제, 속도, 클라우드가 죽으면 클라우드 쓰는 모든 서비스가 안됨(=관리할 수 없는 리스크)해당 세션을 통해 데이터베이스와 소통하기 위한cursor
를 만들어줌
# db 테이블에 csv데이터 넣기
import psycopg2 # db연결
connection = psycopg2.connect (
host =
user =
password =
database =
)
cur = connection.cursor()
cur.execute("""CREATE TABLE table_name(
id INTEGER PRIMARY KEY,
name VARCHAR(4));
""")
import csv
index = 0 # 첫 열이 인덱스일때
with open('file_name.csv' ,'r') as file:
row = csv.reader(file)
next(row) # 다음 인덱스부터 읽기
for i in row:
cur.execute(f"INSERT INTO table_name (columns name ---) VALUES({index},{i[0]} ---);")
index += 1
connection.commit()
cur.close()
connection.close()
csv : https://m.blog.naver.com/pjok1122/221590220300
# cursor.fetchone
## 한번 호출에 하나의 row만을 가져올 때 사용, fetchone()을 여러 번 호출하면 호출할 때마다 한 row씩 데이터를 가져오게 됨
# cursor.fetchall
## 모든 데이터를 한꺼번에 가져올 때 사용
# cursor.fetchmany(n)
## n개 만큼의 데이터를 한꺼번에 가져올 때 사용