어제 못한 도전과제를 일부 풀었다. 다 풀지는 못 했다.
문제
- 클라우드 데이터베이스에 '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 테이블에 넣기
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()
오늘은 클라우드 디비 생성하고 연결하고 테이블 생성까지 직접 해보았으니 만족하고, 남은 부분은 다음에 이어서 해보도록 하자. 약속 가자~!!