본문 바로가기

Back-End/데이터베이스

[DB] 데이터베이스 테이블에 저장하기, 설계하기 (DB 연결, 저장, 자원반환)

~ 목차 ~

 

 
 

데이터베이스 테이블에 저장하기

 

1. 저장한 파일 불러오기 - pandas

2. 테이블 설계하기

    - 테이블정의서

    - 스크립트명세서

3. 데이터 저장 or 조회시에 유용한 라이브러리

    - sqlalchemy (저장)

    - pymysql (조회)

4. DB연결하기

 

5. DB저장하기

 

6. DB 자원 반환(접속 끊기)

 

7. DB연결하기 최종

 

 

 


 

저장한 파일 불러오기

저장한 파일 불러오기  🐾

import pandas as pd
file_path = "./01_data/new_data.csv"
df = pd.read_csv(file_path)
df

저장한 파일 불러오기

 

테이블 설계하기

테이블 설계하기  🐾

 - 테이블명, 컬럼명, 컬럼타입, null 여부에 대한 정의가 필요함
   (산출물)
 - 테이블정의서
 - ERD
 - 스크립트명세서

 

 

<테이블 정의서>

테이블 정의서

 

 

<스크립트 명세서>

스크립트 명세서

※ 직접 Heidisql에서 실행해서 테이블 생성해보기

 

라이브러리 설치하기

 <데이터 저장시에 유용한 라이브러리>  🐾

 - sqlalchemy
 - 설치 : pip install sqlalchemy (가상환경에)
 - 자바에서 mapping방식 처럼 사용하는 것


 <데이터 조회시에 유용한 라이브러리>  🐾

 - pymysql
 - 설치 : conda install -c conda-forge pymysql

  (아나콘다에서 가장 세밀하게 설치하는 방법 : 가장 버전에 맞는 걸 찾음, 오래걸림) 
 - 설치 : pip install pymysql

 

 

DB 연결하기

DB 연결하기  🐾

1. 라이브러리 불러오기

from sqlalchemy import create_engine

2. 연결 정보 작성

db_connection_info = "mysql+pymysql://사용자이름:비밀번호@localhost:포트번호/데이터베이스명명"

3. Database 커넥션(연결)하기

db_connection = create_engine(db_connection_info)
db_connection

 

 

데이터프레임의 컬럼명을 테이블의 컬럼명과 같게 수정 🐾

1. 데이터프레임의 컬럼명 수정하기

df.columns = ["ymd", "time", "power"]
df

2. 특정 컬럼명만 수정하고자 할 때

df.columns = [{"날짜" : "ymd"}]

df 출력

 

 

DB 저장하기

DB 저장하기  🐾

 

- name : 테이블 명
- con : DB접속정보
- index : 데이터프레임의 인덱스 값을 포함할지 여부(True 포함, False 미포함)

- if_exists : 테이블 상태 확인
      * append : 데이터를 기존 테이블에 추가
      * fail : 아무 동작 하지 않기
      * replace : 동일한 테이블이 존재하면 기존 데이터를 삭제하고 새로운 데이터로 저장

 

df.to_sql(name="time_power_demand",
          con=db_connection,
          index=False,
          if_exists="append")

 

저장 성공

 

 

데이터베이스 자원 반환(접속 끊기)

연결 종료하기  🐾

db_connection.dispose()

 

데이터 조회하기  🐾

- 조회시에는 pymysql 라이브러리 사용

 

 

DB 연결하기

import pymysql
### 접속 정보
# - 접속 ID or 도메인
host = "localhost"

# - 사용자계정
user = "gjuser"

# - 패스워드
password = "dbdb"

# - 데이터베이스명
db = "gjdb"

# - 한글처리
charset = "utf8"

# - 자동반영
autocommit = True

# - 조회시 컬럼명을 동시에 보여줄지 여부 설정
cursorclass = pymysql.cursors.DictCursor

 

### DB 접속하기
try : 
    conn = pymysql.connect(host=host,
                           user=user,
                           password=password,
                           db=db,
                           charset=charset,
                           autocommit=autocommit,
                           cursorclass=cursorclass)
    print("DB접속 성공 >>>", conn)
except :
    print("DB Server Checking...")

 

접속 성공

 

### 커서 받아오기
cur = conn.cursor()
cur

커서 받기

 

### Select 문 생성 후 DB에게 요청 및 응답 받기
sql = " Select * From time_power_demand "
rs_cnt = cur.execute(sql)
print(f"{rs_cnt}건이 조회 되었습니다.")

응답받기

### DB 종료하기
try :
    cur.close()
    conn.close()
except :
    print("이미 모든 커서와 접속정보가 반납되었습니다.")

 

728x90