*mysql 이 무엇인지? DB, 테이블, 컬럼


mysql을 알아보기 전 미리 알아야 하는 게 있다.

*데이터베이스(DB):특정 기업이나 조직 또는 개인이 필요에 의해 논리적으로 연관된 데이터를 모아 일정한 형태로 저장해 놓은 것
-->쉽게 말해 데이터(회원정보, 게시판 글 ,사진)들이 모여있는 곳을 데이터베이스(데베)라 부른다

*DBMS(data base management service):데이터베이스 관리 프로그램

특징
-통합된 데이터(공용)
-저장된 데이터
-운영 데이터(업무 목적으로)
-공용데이터(한 사람 한 업무를 위해 사용x)

엑셀과 다른 점
-엑셀은 같이 수정이 안됨=동시에 작업이 안된다
-엑셀은 사이즈의 한계가 있다.

DBMS의 장점
-중복 최소화
-공용
-일관성
-무결성
-보안
-표준화
-전체 데이터 요구 조정

종류
*관계형 데이터베이스-(ex:myspl)
데이터 항목 간에 사전 정의된 관계가 있을 때 데이터 항목들의 모음을 가리킨다. 이 항목들은 열과 행으로 이루어진 "테이블 집합"으로 구성됨. 

*즉 mysql이란?

mysql은 데이터를 저장하고 관리하는데 널리 사용되는 오픈 소스 관계형 데이터베이스 관리시스템이다.

*비관계형 데이터베이스-(ex.mongo db)
유연한 스키마를 갖추고 있는데 데이터 볼륨, 짧은 지연 시간과 "유연한 데이터 모델":이 필요한 애플리케이션에 최적화 되어 있다.

관계형 데이터베이스의 특징
-2차원 테이블로 표현(가로x세로=테이블)
-데이터 무결성
-SQL사용
-한번에 레코드 처리가 아닌 집합을 처리함
 

사진 출처:https://velog.velcdn.com/images/gyrud02/post/e138ba01-198c-4390-848a-419a94e23537/Table.png



*테이블

-실질적으로 자료가 저장되는 곳
-행과 컬럼으로 구성
-특정한 목적과 성격에 의해 생성되는 집합체(ex.고객테이블, 주문테이블)
-사용자의 접근이 가능한 모든 데이터 보유

*행=레코드=튜플

일련의 관련 자료를 나타낸다

*컬럼=항목

해당하는 데이터들의 속성=구조를 나타낸다


*필드
정보의 한 조각으로, 처리의 최소 단위가 되는 것

기본키/외부키(private key/foreign key)
-기본키:유일하게 번호값 구분할 수 있게 주는 값
-외부키:테이블의 연결을 시켜주는 키(참조하는 테이블의 기본키)

*SQL:데이터베이스와 대화하기 위해 디자인된 언어
-관계형 데이터베이스에서 데이터 조작과 데이터 정의를 하기 위해 사용하는 언어
-입력 조회 수정 삭제 하기 위해서  SQL사용
-데이터베이스 쿼리는 데이터베이스에서 데이터를 추출하여 읽을 수있는 형식으로 형식을 지정함.
-쿼리는 데이터베이스에 필요한 언어, 즉 일반적으로 해당 언어 SQL.

특징
-쉽다
-절차적인게 아닌 선억적 언어
-DBMS 종류 얽매이지 않고 사용 가능

작업종류
-데이터 조회
-테이블 행 삽입 갱신 및 삭제
-객체 생성, 변경 및 삭제
-엑세스 제어
-무결성 보장

*select, insert, delete, update 쿼리문에 대해서 이해해보기

-select-데이터 조회
select 컬럼명 from 테이블명

-insert-새 행 입력(ex.새로운 고객 정보를 집어 넣을 때)
insert into 테이블명(칼럼명1,칼럼명2) values(값1,값2)

-delete-행 제거(ex.데이터 지울 때)
delete from 테이블명

-update-기존 행 변경(ex.기존 사원의 주소가 바뀌었을 때)
update 테이블명 set칼럼명=변경할 값

*where 조건문이 무엇인지

-where 조건
oerder by 컬럼명 asc or desc

-selct column1 from table where 조건문 order by column2 asc or desc;
-column1 대신 *을 넣으면 컬럼 전체
--------------------------------------------------------------------------------------------------------------------------------------------

*테이블 생성 - 랭크를 저장하기 위해 테이블 생성 ( rank 테이블)
https://pinetreeday.tistory.com/145

 

DB MySQL WorkBench Tool을 이용한 Table 생성하는 방법

DB MySQL WorkBench Tool을 이용한 간단한 SQL문 작성 -> Mysql WorkBench를 실행 후 왼쪽 상단의 SCHEMA 항목에서 마우스 오른쪽 클릭 후 Create Schema... 을 선택합니다. -> Schma를 생성하게 되면 Name을 설정할 수

pinetreeday.tistory.com

위의 블로그 참고하여 테이블 생성(결과물은 제일 밑에 있다)
 

*파이썬에서 mysql 모듈을 설치하고 연결진행& 파이썬에서 가지고 온 데이터 내용을 테이블에 insert를 해본다.

pymysql 모듈을 설치해주고 가져온다

import pymysql

 
mysql과 연결 시켜주고(연결에 필요한 데이터를 넣어준)
conn은 데이터베이스에 연결할 때 사용되는 객체

# MySQL 연결 설정
conn = pymysql.connect(host="localhost", user="root", password="tjcks0035@", db="rs", charset="utf8")

 
커서 객체를 생성해준다
cursor: 데이터베이스에서 데이터를 쿼리하고 조작하게 도와주는 것

cursor = conn.cursor()

 
전글에서 크롤링한 데이터를 가져와 data리스트에 넣어준다.

data = requests.get('https://sports.news.naver.com/wfootball/index')
soup = BeautifulSoup(data.text, 'html.parser')

soccer_rank = soup.select('#_team_rank_epl > table > tbody > tr')

# 데이터를 담을 리스트 초기화
data = []

for tr in soccer_rank:
    span = tr.select_one("td > div > div.info > span")

    if span:
        print(span.text)
        data.append(span.text)

    else:
        print("Span not found")

 
앞에서 배운 insert쿼리문으로 데이터베이스에 data의 자료들을 넣어준다.

# 데이터 삽입 쿼리
insert_query ="""
INSERT INTO  rs.rs
(name) 
VALUES 
(%s)"""

# 데이터 삽입
cursor.executemany(insert_query, data)
conn.commit()

 
마무리로 커서와 conn을 종료시켜준다

# 연결 종료
cursor.close()
conn.close()

 
전체

import requests
import pymysql
from bs4 import BeautifulSoup

# MySQL 연결 설정
conn = pymysql.connect(host="localhost", user="root", password="----", db="rs", charset="utf8")

#MySQL 데이터베이스 연결 객체 conn을 사용하여 커서 객체를 생성하는 코드입니다.
#커서는 SQL 쿼리를 실행하고 결과를 가져오는 데 사용되는 객체입니다. 커서를 사용하여 데이터베이스에서 데이터를 쿼리하고 조작할 수 있습니다.

cursor = conn.cursor()
data = requests.get('https://sports.news.naver.com/wfootball/index')
soup = BeautifulSoup(data.text, 'html.parser')

soccer_rank = soup.select('#_team_rank_epl > table > tbody > tr')

# 데이터를 담을 리스트 초기화
data = []

for tr in soccer_rank:
    span = tr.select_one("td > div > div.info > span")

    if span:
        print(span.text)
        data.append(span.text)

    else:
        print("Span not found")

        # _team_rank_epl > table > tbody > tr:nth-child(2) > td:nth-child(2) > div > div.info > span

# 데이터 삽입 쿼리
insert_query ="""
INSERT INTO  rs.rs
(name) 
VALUES 
(%s)"""

# 데이터 삽입
cursor.executemany(insert_query, data)
conn.commit()

# 연결 종료
cursor.close()
conn.close()

 

 
결과





+ Recent posts