DevKim

[ Webtooniverse ] pymysql을 이용하여 Maria DB와 연동 & MySQL 쿼리문 본문

Spring Project/Webtooniverse

[ Webtooniverse ] pymysql을 이용하여 Maria DB와 연동 & MySQL 쿼리문

on_doing 2021. 7. 28. 22:22
728x90

[ pymysql을 이용하여 mariaDb와 연동 ]

import pymysql

conn = pymysql.connect(host='엔드포인트', user='',
                       password='', charset='utf8', db='')
cur = conn.cursor()

 

[ 장르 테이블 생성]

네이버 웹툰의 장르는 다음과 같다.

- 에피소드 옴니버스 스토리 일상 개그 판타지 액션 드라마 순정->(로맨스로 변경) 감성 스릴러 시대극 스포츠

 

네이버 장르에는 순정이라고 써져있지만,

실제로 웹툰에 들어가보면 로맨스라고 써져있으니 이 점에 유의해야한다.

sql="CREATE TABLE GENRE(genreId BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,genreType VARCHAR(45) NOT NULL);"
cur.execute(sql)

 

[ 장르 테이블 한글 설정 ]

장르명이 한글로 들어가야하기 때문에, 테이블에 한글이 들어갈 수 있게 설정해준다.

sql="ALTER TABLE GENRE CONVERT TO CHARACTER SET utf8;"
cur.execute(sql)

 

[ 기타 ]

- 특정 행의 데이터 삭제

genre_sql="DELETE FROM GENRE WHERE genreId=9;"

 

- 특정 행 지운 후, 시작 할 PK값 지정하기

 

AUTO_INCREMENT 는 중간에 PK=3인값을 지웠다면, 그 다음 저장되는 PK값은 3이 아닌, 4가된다.

즉 1,2,4,5.. 이런식으로 저장되는 것을 방지하기 위해 시작 할 PK 값을 지정할 수 있다.

sql="ALTER TABLE GENRE AUTO_INCREMENT =9;"

 

-  데이터 삽입

genre_sql="INSERT INTO GENRE (genreType) VALUES (%s);"
values=(변수)
cur.execute(genre_sql,values)

 

- 컬럼 추가

sql="ALTER TABLE `webtoon` ADD `toon_point_total_number` float "
cur.execute(sql)

[ FK 설정 ]

- constraint fk_type

  FOREIGN KEY (원하는 컬럼) references 참조할 테이블(PK)

CREATE TABLE review(
    review_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT,
    toon_id BIGINT,
    constraint fk_type
    FOREIGN KEY (user_id)
        REFERENCES user(user_id),
    FOREIGN KEY(toon_id)
        REFERENCES webtoon(toon_id),
    review_content VARCHAR(4000),
    user_point_number float ,
    create_date TIMESTAMP ,
    like_count int);

 

[ LocalDateTime -> Mysql type설정 ]

MySQL에는 Datetime과 Timestamp 타입이 두가지가 존재한다.

대체 어떤걸 타입으로 가져가야할까?

 

Datetime과 Timestamp 둘다 현재 시간을 넣어보면 값이 동일하게 나오는 것을 확인할 수 있다.

그런데 이때 시스템의 TimeZone을 변경하면?

 select * from datedemo;
+---------------------+---------------------+
| mydatetime          | mytimestamp         |
+---------------------+---------------------+
| 2021-07-30 14:11:09 | 2021-07-30 04:41:09 |
+---------------------+---------------------+
1 row in set (0.00 sec)

TimeStamp의 값만 변경된다.

 

DateTime은 타임존이 반영되지 않기 때문에,

Date의 타입은 timestamp로 가져가기로했다.

 

[ VARCHAR vs. TEXT ]

- 게시글의 경우 몇 글자까지 허용해야하는지 max size limit를 설정하기엔, 4

웹툰 내용을 저장할 때 limit를 너무 적게 설정해서 오류가 난적이 있기에 섣불리 정하기가 어려웠다.

 

그러다가 TEXT type에 대해 알게 되었고, max limit을 지정하지 않아도 된다는 점에서 매력적으로 느껴졌다.

그러나 TEXT 타입에는 치명적인 단점이 있다.

 

1. TEXT : disk에 저장한다.

2. VARCHAR : memory에 저장한다.

 

즉, 자주 불리는 query에서는 이 둘의 performance 차이가 크게 난다는 점을 주의해야한다.

 

 

참고

- https://www.w3schools.com/python/python_mysql_insert.asp

- https://nomadlee.com/mysql-%EC%B5%9C%EC%A0%81%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85-%EC%84%A0%ED%83%9D-%EB%B0%A9%EB%B2%95/#MySQL

728x90
Comments