[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.08.07
📕 학습 목록
- DBeaver (통합 DB 관리 도구)
- SQL (DML; 데이터 조작 언어)
- Python - MariaDB 연동
📗 기억할 내용
1) DBeaver
- 통합 DB 관리 도구; 다양한 DB를 한 곳에서 관리하고 쿼리를 실행할 수 있게 도와줌
- 다양한 데이터베이스 시스템과 호환됨(MySQL, PostgreSQL, Oracle, SQL Server, SQLite 등)
- 여기선 MariaDB - DBeaver 연결
2) SQL (DML; Data Manipulation Language)
- DML(데이터 조작 언어) : 데이터 검색•등록•갱신•삭제
① DML 구조 : CRUD
C (create 생성) : INSERT INTO ~ VALUES "행 데이터 or 테이블 데이터 삽입"
R (read 읽기) : SELECT ~ FROM ~ WHERE "테이블 데이터의 검색 결과 집합 취득'
U (update 수정) : UPDATE ~ SET ~ WHERE "표 업데이트"
D (delete 삭제) : DELETE FROM ~ WHERE "테이블에서 특정 행 삭제"
-- 데이터 입력
INSERT INTO tb_board(
title,
content,
user_id
) VALUES (
'글제목',
'글내용',
1
)
-- 데이터 수집
UPDATE tb_board
SET
title = '수정된 제목'
WHERE id = 1
-- 데이터 검색
SELECT
id,
title,
content
FROM
tb_board
WHERE 1=1 -- 항상 True -- 모든 행 삭제 : WHERE 구문 아예 삭제해도 됨
AND id = 1
AND title = '제목1'
-- 데이터 삭제
DELETE FROM
tb_board
WHERE id = 1
② 두 테이블 연결 : JOIN
- 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 냄
INNER JOIN(내부 조인) : 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 함
OUTER JOIN(외부 조인) : 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과 도출O
CROSS JOIN(상호 조인) : 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인
SELECT ~ FROM ~ (AS) ~ JOIN ~ (AS) ~ ON
CREATE TABLE tb_board_comment (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
board_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
comment VARCHAR(200) NULL,
create_date DATETIME DEFAULT CURRENT_TIMESTAMP,
update_date DATETIME DEFAULT CURRENT_TIMESTAMP,
-- 테이블 새로 생성시 FK 지정
FOREIGN KEY(board_id) REFERENCES tb_board(id),
FOREIGN KEY(use_id) REFERENCES tb_user(id)
);
-- 기존 테이블에 FK 추가하기
ALTER TABLE tb_board ADD CONSTRAINT
FOREIGN KEY(user_id) REFERENCES tb_user(id);
-- 데이터 JOIN하기
SELECT * -- 전체 column 선택
FROM
tb_board AS board -- 별칭 부여
LEFT OUTER JOIN tb_board_comment AS comment
ON board.id = comment.board_id -- board의 id가 comment의 board_id와 같음
3) Python - MariaDB 연동
- pymysql 라이브러리 설치 : 파이썬에서, MySQL•MariaDB 데이터베이스와 상호작용
# Python 터미널에 입력
pip install pymysql
# Anaconda Prompt에 입력
conda install pymysql
- 파이썬에서 데이터베이스 연결 / 실행
import pypmysql # MySQL 데이터베이스와 연결하여 작업할 수 있게 도와주는 패키지
# [데이터베이스에 연결]
def db_connect():
conn = pypmysql.connect(
host = '000.0.0.0',
user = '유저아이디',
password = '비밀번호',
db = '데이터베이스명',
charset = 'utf8mb4',
# 데이터베이스를 딕셔너리로 반환
cursorclass = pymysql.cursors.DictCursor
)
return conn
# [연결된 데이터베이스 내 테이블에 연결 → 쿼리]
# 실행할 SQL 쿼리 정의
SQL = """
SELECT *
FROM tb_board
"""
# SQL 쿼리 실행
with db_connect() as conn:
with conn.cursor() as cursor:
cursor.execute(SQL)
# 쿼리 결과를 변수에 저장; 딕셔너리로 반환
results = cursor.fetchall()
# 쿼리 결과를 콘솔에 출력
print(results)
📘 트러블 슈팅
[문제]
- 문제 내용
출력 과정에서 오류 발생
name = "홍길동" age = 20 print("안녕하세요," + name "님, 당신의 나이는 " + age + "세입니다.")
{ "name": "TypeError", "message": "can only concatenate str (not \"int\") to str", "stack": "--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[2], line 3 1 name = \"홍길동\" 2 age = 20 ----> 3 print(\"안녕하세요,\" + name + \"님, 당신의 나이는 \" + age + \"세입니다.\") TypeError: can only concatenate str (not \"int\") to str" }
- 문제 원인
1종류 이상의 자료형을 한 문장으로 출력하려면; 산술연산자(+)가 아닌 쉼표(,)로 연결
[해결]
- 해결 방법
print("문자열", 변수, "문자열", 변수, "문자열") 의 형태로 출력
- 해결 결과
name = "홍길동" age = 20 print("안녕하세요, ", name, "님, 당신의 나이는 ", age, "세입니다.")
안녕하세요, 홍길동 님, 당신의 나이는 20 세입니다.
📙 내일 일정
- 파이썬 프로그래밍(컨테이너 자료형, 조건문, ...) 학습
'TIL _Today I Learned > 2024.08' 카테고리의 다른 글
[DAY 22] Flask (0) | 2024.08.09 |
---|---|
[DAY 21] Flask (0) | 2024.08.08 |
[DAY 19] API, DB, SQL (0) | 2024.08.06 |
[DAY 18] HTML, CSS, Javascript (0) | 2024.08.05 |
[DAY 17] Git & Web (0) | 2024.08.02 |