[TIL]21.07.16 python psycopg2를 사용한 Postgresql 접속

Seung Joo·2021년 7월 16일
0

TIL

목록 보기
26/31
post-thumbnail

접속 & 쿼리 예시

import psycopg2
import csv


# postgresql 접속
conn = psycopg2.connect(host = 'server_host', 
database = 'name',
user = 'user',
password = 'password')

# 커서 생성
cur = conn.cursor()

# table 생성
cur.execute("""CREATE TABLE test_table (
Id INTEGER PRIMARY KEY NOT NULL,
Name VARCHAR(128),
Age INTEGER);""")



# 데이터베이스에 저장할 csv file
with open('test.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    datas = [x for x in reader] # csv 파일 리스트로 저장

# header 삭제
datas.pop(0)
# Id 추가
for i in range(len(datas)):
    datas[i].insert(0, i)

# 다중 삽입문을 위한 빈 텍스트 생성
insert_text = ''

# 튜플형태로 변경하고 ','로 나누어 데이터 삽입하기 위해 for문으로 삽입문 정의
for i,text in enumerate(datas):
    insert_text += str(tuple(text)) # 튜플로 변경하여 저장
    insert_text += ',' # ','로 데이터 나눔

insert_text = insert_text[:-1] # 삽입문의 마지막 ',' 제거

# 삽입문 전송
cur.execute("INSERT INTO passenger (Id, Name, Age) VALUES {};".format(insert_text))

# 데이터 베이스에 내용 전송
conn.commit()

# 데이터 베이스에 제대로 저장되었는지 확인
cur.execute("SELECT * FROM test_table")
result = cur.fetchall()
print(result[-3:])

# 데이터 베이스 연결 종료
conn.close()

주의 사항

  • commit()을 통해 서버로 내용을 전달하지 않으면, 커서에만 데이터가 남아있고, 서버에 적용이 되지 않음
  • 데이터 베이스의 접속혼선을 방지하기 위해서 항상 close() 함수를 통해 데이터베이스 종료
  • 리스트 형태의 데이터 튜플 형태로 변환하여 삽입문으로 한번에 저장할 수 있음. 하지만 데이터베이스에 올리기 전 항상 데이터 확인하고 테스트 해볼 것
profile
조금씩 천천히

0개의 댓글