PostgreSQL이란?
The PostgreSQL Global Development Group에서 개발된 오픈 소스 ORDBMS며, 1996년도에 발표되어 무료이면서도 강력한 성능을 통해 사랑받는 DB다.
MySQL과 사용법이 거의 동일하여 기존 사용자도 많이 옮겨타고 있는 추세이다, 이번엔 Python Dataframe으로 전처리를 하고나서, 해당 데이터를 PostgreSQL에 바로 Python코드를 사용해서 적재하거나 기존 데이터를 수정하는 방법을 사용할 것이다.
설치
pip install psycopg2-binary
위 pip명령어를 사용하여 라이브러리를 다운받으면 된다,
만일 라이브러리 다운로드가 안될경우 아래 명령어를 command창에서 실행해보시길발바니다.
python3 -m pip install psycopg2-binary
또는
python -m pip install psycopg2-binary
pip는 내부 또는 외부 명령~~~ 이런 에러가 발생하면 아래 게시글 참조바랍니다.
Python코드로 전송하기(+쿼리문 실행하기)
1) DB에서 Table 데이터 가져와서 Dataframe으로 만들기(추출)
import psycopg2
DB_Name='' //Databasem이름
User_Name='' //DB에 접속할 유저명
Password='' //User_Name의 비밀번호
Table_Name='' //DB에서 조회할 Table이름
Host_IP='' //접속할 DB의 접속가능한 IP(만일 본인 PC에 설치된 DB라면 127.0.0.1를 사용하면 된다.)
Port_Num= //기본 포트번호는 5432이지만, 다른것으로 변경했다면 변경한 값을 입력해야 한다.
with psycopg2.connect(dbname=DB_Name, user=User_Name, password=Password, host=Host_IP, port=Port_Num) as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM {}".format(Table_Name))
# 결과 가져오기
data = cur.fetchall()
# 컬럼 이름 가져오기
columns = [desc[0] for desc in cur.description]
# DataFrame 생성
df = pd.DataFrame(data, columns=columns)
이렇게 가져온 Dataframe을 사용해서 원하는 전처리를 진행하면 된다.
2) DB에서 테이블 삭제하기
import psycopg2
Table_Name='' //DB에서 삭제할 Table이름
with psycopg2.connect(dbname=DB_Name, user=User_Name, password=Password, host=Host_IP, port=Port_Num) as conn:
with conn.cursor() as cur:
cur.execute(f"DROP TABLE IF EXISTS {}".format(Table_Name))
3) DB에서 테이블 생성하기(Create)
import psycopg2
Table_Name='' //DB에 생성할 Table이름
with psycopg2.connect(dbname=DB_Name, user=User_Name, password=Password, host=Host_IP, port=Port_Num) as conn:
with conn.cursor() as cur:
create_table_query = ''' CREATE TABLE IF NOT EXISTS {} ( {} ) '''.format(Table_Name,',\n '.join(['{} {}'.format(col, 'TIMESTAMP' if dtype == 'datetime64[ns]' else 'INTEGER' if dtype == 'int64' else 'TEXT' if dtype == 'object' else 'REAL' if dtype == 'float64' else dtype) for col, dtype in zip(df_modified.columns, df_modified.dtypes)]))
cur.execute(create_table_query)
conn.commit()
//( {} )의 경우 Dataframe의 dtype과 PostgreSQL에서 사용하는 dtype이 달라 적절한 dtype으로 변환하는 코드다.)
4) DB에서 Dataframe 데이터 추가하기(Insert)
아래 코드를 사용하면 별도의 전처리 없이 dataframe을 그대로 PostgreSQL에 업로드가능하다.
import psycopg2
Table_Name=''
df //업로드할 Dataframe
with psycopg2.connect(dbname=DB_Name, user=User_Name, password=Password, host=Host_IP, port=Port_Num) as conn:
with conn.cursor() as cur:
# 데이터 업로드
for index, row in df.iterrows():
cur.execute("INSERT INTO {} ({}) VALUES ({})".format(Table_Name,
', '.join(df.columns),
', '.join(['%s' for _ in range(len(df.columns))])
), tuple(row))
conn.commit()
위 코드들에 관하여 질문이 있을경우 댓글로 작성해주시기 바랍니다.
끝.
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python / 파이썬 / Python 기초] List 한칸씩 옆으로 밀기(for문 or 인덱스) (0) | 2024.02.19 |
---|---|
[Python / 파이썬]pandas to_csv로 저장한 csv파일의 한글이 깨질때(encoding='utf-8' 해도 깨질때) (2) | 2024.02.06 |
[Python/파이썬/pandas] Pandas read_excel, Select Sheet Name, 시트 선택하기 (0) | 2024.01.31 |
[Python / 파이썬] 특정 라이브러리에서 사용가능한 메서드들(함수들) 다 찾기 (0) | 2024.01.26 |
[Pandas / Dataframe]특정 컬럼의 특정 문자열을 변경하는 코드 / 변경이 안될때 해결법 (0) | 2024.01.19 |