220605_TIL

신두다·2022년 6월 4일
0

TIL

목록 보기
34/82

어제에 이어서..

한 것 / 배운 것

  • CSV 파일을 불러와서 insert하는 for문을 다시 썼다. IDLE로 직접 테스트하면서 썼다. 더 깔끔하게 쓸 수 있는 코드가 있는지는 모르겠지만, 내가 아는 선에선 지금이 가장 직관적인 것 같긴 하다.
    • 딕셔너리 형태로 불러왔으면 그걸, 엊그제 해봤던 것처럼, items()로 뽑고 그걸 다시 리스트 형태로 바꿔서 인덱싱을 해야한다~~
  • VALUES (?, ?, ?, ?, ?, ?, ?, ?)VALUES (%s, %s, %s, %s, %s, %s, %s, %s)로 수정했다. 어제 ?부분에서도 에러가 났었는데, 다른 거 구글링하다가 %s로 써져있는 걸 보았다. 그때서야 세션 영상에서 PostgreSQL은 sqlite3와 다르게 ?가 아니라 %로 변수 준다고 잠깐 언급했던게 생각났다. 기억하자.
  • 아래 코드를 실행하여 다음과 같은 결과를 얻을 수 있었다.
import psycopg2

host = '00'
user = '00'
password = '00'
database = '00'

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

cur = conn.cursor()

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,
    aa INTEGER,
    bb INTEGER,
    Fare FLOAT
)
""")

conn.commit();

# 나머지 코드는 titanic.csv 의 데이터를 passenger 테이블로 전달할 수 있도록 자유롭게 작성해주시기 바랍니다.

import csv

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

lines = csv.DictReader(f)

for line in lines:
    i = list(line.items())
    v1 = i[0][1]
    v2 = i[1][1]
    v3 = i[2][1]
    v4 = i[3][1]
    v5 = i[4][1]
    v6 = i[5][1]
    v7 = i[6][1]
    v8 = i[7][1]
    cur.execute("INSERT INTO passenger(Survived, Pclass, Name, Sex, Age, aa, bb, Fare) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", (v1,v2,v3,v4,v5,v6,v7,v8))

conn.commit();

f.close()

남은 것

  1. Id Serial start 1이 아니라 0부터 시작하도록 하는 방법 찾아 수정하기.
    • 2번 해결이 더 우선순위라 미루는 중..
  2. Siblings/Spouses Aboard, Parents/Children Aboard 이 두 칼럼명 insert 구문에서 자꾸 오류나서 일단 다른 코드 잘못된 부분 없는지 보려고 aa, bb로 바꿔서 돌려봤는데, 방법 찾아 수정하기.

그래도 어제보다 진전이 있었다, 헤헤. 재밌구만?


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

0개의 댓글