220604_TIL

신두다·2022년 6월 4일
0

TIL

목록 보기
33/82

어제 못한 도전과제를 일부 풀었다. 다 풀지는 못 했다.

문제

  • 클라우드 데이터베이스에 'passenger' 라는 테이블을 생성하고 titanic.csv 에 있는 데이터를 'passenger' 테이블로 옮깁니다.

아래와 같이 풀었다.

1. 클라우드 DB 서비스인 ElephantSQL를 통해 데이터 베이스 생성하기
- 사이트 들어가면 쉽게 생성 가능하다.
2. 데이터 베이스 연결
- psycopg2를 터미널을 통해 설치하고 import해서 사용한다. 근데 난 오류 떠서 psycopg2-binary로 설치해줬다.
- 연결은 아래와 같이만 해주면 된다. (실제 정보는 제거)

import psycopg2

host = '000'
user = '000'
password = '000'
database = '000'

connection = psycopg2.connect(
     host=host,
     user=user,
     password=password,
     database=database
 )

cur = connection.cursor()

3. passenger 테이블 생성하기
- PostgreSQL은 sqlite랑 문법이 살짝 달라서 좀 찾아가면서 했다. 컬럼 중에 Sibling 어쩌구에 띄어쓰기가 있는데, 이 경우 PostgreSQL의 경우 ""로 묶는다고 한다. Mysql등 다른 디비는 다른 기호를 사용한다. (필요할 때 다시 찾아보셈)
- 아, Id 칼럼이 Auto-Incremente Start 0이어야 하는데, PostgreSQL에서는 어떻게 지정하는지 찾아보고 수정해야 한다.

cur.execute("DROP TABLE IF EXISTS passenger;") #여러 번 코드 돌리면 이미 테이블이 있어 오류가 난다. 그거 막으려고 넣는 코드임.

cur.execute("""CREATE TABLE passenger(
    Id SERIAL PRIMARY KEY, 
    Survived INTEGER,
    Pclass INTEGER,
    Name VARCHAR(128),
    Sex VARCHAR(12),
    Age FLOAT,
    "Siblings/Spouses Abroad" INTEGER,
    "Parents/Children Abroad" INTEGER,
    Fare FLOAT
)
""")

connection.commit();

4. CSV 파일 불러와서 데이터 passenger 테이블에 넣기

  • Pandas 말고 csv 모듈 써보는 걸 추천하길래 그렇게 해보는 중이다. (Pandas 패키지는 약 50 MB, csv 모듈은 약 20KB 의 크기로 약 2000 배 이상의 크기 차이가 난다고 함.)
  • 일단 불러오는 것까지는 어찌저찌 되는 것 같은데, 자꾸 sibling/Spouses...의 / 부분에 오류가 뜬다. 그래서 parents 어쩌구까지 두 칼럼명을 임의로 aa, bb로 바꿔서 돌려봤는데, 그 다음엔 뒤에 ?, 부분에 오류가 났다. 뭔가 잘못 하고 있는 것 같다.
  • 파일 불러오기가 잘못되었나..
import csv

f = open('경로', 'r', encoding='utf-8')

lines = csv.DictReader(f)

for line in lines:
    cur.execute("INSERT INTO passenger(Survived, Pclass, Name, Sex, Age, Siblings/Spouses Abroad, Parents/Children Abroad, Fare) VALUES (?,?,?,?,?,?, ?, ?)", line)

connection.commit();

f.close()

오늘은 클라우드 디비 생성하고 연결하고 테이블 생성까지 직접 해보았으니 만족하고, 남은 부분은 다음에 이어서 해보도록 하자. 약속 가자~!!

profile
B2B SaaS 회사에서 Data Analyst로 일하고 있습니다.

0개의 댓글