[N414] DB API

쥬쥬스·2023년 3월 22일
0

section4

목록 보기
3/15

0. 용어정리

API

API(Application Programming Interface)
한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법
(Interface → 계약, 약속. rule을 만들어둔 것)


어떤 api를 사용할지 menu를 통해 보는 것
고객이 메뉴를 보고 웨이터에게 요청 웨이터는 주방에 요청

DB API

DB와 프로그래밍 언어(python)가 서로 소통(상호작용)할 수 있게 만들어 주는 것
python을 통해 DB에 접근하고 for문 같은 python의 기능들과 연계하여 확장성을 제공해준다.
sqlite의 sqlite3 / postgreSQL의 psycopg2

PEP

PEP(Python Enhancement Proposal)
파이썬이 개선되도록 하는 제안, 제안을 통해 어떤 표준이 정해짐

URI

URI(Uniform Resource Identifier)
RF : https://velog.io/@younoah/uri-url-urn

URL : 접근할 수 있도록 https://사용
URN : 경로만 주고, 외부에서 접근할 수 있도록 X = 어떻게 접근할 것인지 명시하지 않음

Cloud DB

clound Base : 사용만 하는 것, 규칙에 따라야함 → 보안 좋음
On-Premise : 로컬 서버에 데이터 저장, 자유도

포트번호

IP를 할당받았을때 다양한 서비스를 이용할 수 있게끔 기본 베이스가 되는 것
하나의 머신에서 포트번호를 통해 여러 프로토콜들을 사용할 수 있다

fetch

데이터를 fetch한다 = 데이터를 가져온다
커서가 가르키는 위치부터 단계별로 이동, 묶음으로 이동하며 데이터를 처리하는 개념으로 fetch 이해


IF NOT EXISTS : 테이블 있으면 안만들게~
(?,?) → %s, %s
fetchall() : 범위에 있는거 다 가져와


오후수업

1. Python DB API

nano ('_'.py) 해서 진행해도 됨

import sqlite3

conn = sqlite3.connect('test.db')

python을 git bash에서 켜서 진행

import sqlite3

conn = sqlite3.connect("/어쩌고/어쩌고/test.db") # 파일열기
# enter했을 때, 오류 안나면 연결된 것

cur = conn.cursor()

cur execute(""" CREATE TABLE IF NOT EXISTS test_table(
					name VARCHAR(32),
                    age INT);
     		""") # exitst할때 뒤에 s 빼먹는거 조심!!!!

# 데이터 insert
cur.execute("INSERT INTO test_table (name,age) VALUES ('spongebob',12);")
# 이때는 데이터가 들어가진 않음. commit 해줘야함

# commit 
conn.commit()
# 이후에 dbeaver에서 확인
# 만약 database is locked ; 오류 뜨면 dbeaver에서 연결종료하고 다시하면 재진행가능 -방법(1)
# conn.close() -방법(2)

# 이렇게 insert해도 가능
name = 'banana'
age = 13

cur.execute("INSERT INTO test_table (name, age) VALUES (?, ?)",(name,age))

# 추가 insert
cur.execute("INSERT INTO test_table (name, age) VALUES ('patrick', 13);")
cur.execute("INSERT INTO test_table (name, age) VALUES ('squidward', 14);")

# 아래와 같은 방법도 사용 가능합니다.
# users의 elemnet로 tuple이 들어가있음
users = [('lemon', 10),
         ('apple', 15)]

for user in users:
    cur.execute("INSERT INTO test_table (name, age) VALUES (?, ?);", user)
    
# 데이터 입력
conn.commit()

# 이 공간에서 실행해보기
python 'test'.py 

2. 클라우드 데이터베이스

서비스 사용 : ElephantSQL
URL : postgres://아이디:패스워드@호스트url

console에서 python으로 입력

pip install psycopg2

import psycopg2

# connection맺기
conn = psycopg2.connect(
    host="",
    database="",
    user="",
    password=""
)

cur = conn.cusrsor()

cur execute(""" CREATE TABLE IF NOT EXISTS test_table(
					name VARCHAR(32),
                    age INT);
     		""")

# 데이터 insert
cur.execute("INSERT INTO test_table (name,age) VALUES ('spongebob',12);")

# 다른 방법
name = 'banana'
age = 13

cur.execute("INSERT INTO test_table (name, age) VALUES (?, ?)",(name,age))
# 이때 ?에 syntax오류

s = "INSERT INTO test_table (name, age) VALUES (" + "'"+str(name) + "'"+","+str(age)+");"
print(s)

cur.execute(s) # 정상 입력 가능

# 두번째
users = [('lemon', 10),
         ('apple', 15)]
         
for user in users:
	name = user[0]
    age = user[1]
    s = "INSERT INTO test_table (name, age) VALUES (" + "'"+str(name)+ "'"+","+str(age)+");"
    # s = "INSERT INTO test_table (name, age) VALUES (" + "'"+str(user[0])+ "'"+","+str(user[1])+");"
    # s = "INSERT INTO test_table (name, age) VALUES ({0}, {1});".format(user[0], user[1])
    cur.execute(s)
    # execute 오류가 있으면 print(s)해보고 dbeaver에서 sql문 되는지 확인해보고 수정해서 execute해주기
    
conn.commit()

cur.execute("SELECT * FROM test_tables;")
records = cur.getchall()
print(records)

# 수정
nano ___.py

# 실행
python ___.py
  1. 데이터베이스에서 sql문 사용하는걸 익숙하게
  2. 파이썬에서 connection 걸고, sql문 작성한거 돌려보기
  3. 안되면 select 하나만 시도해보기
import psycopg2

# connection맺기
conn = psycopg2.connect(
    host="",
    database="",
    user="",
    password=""
)

cur = conn.cursor()

cur.execute("SELECT name, age FROM public.test.table;")

records = cur.fetchall()
print(records)

→ conn이라는 객체에서 cursor 객체 불러와서 cur라는 변수에 저장
→ cur(객체).execute()
→ select문이니까 fetch해봄

💥성공했다면, cur.execute만 바꿔서 conn.commit()해주고 돌려보기

💨 오늘의 회고

서버 연결하는거 어렵다고 했었던 친구들의 이야기가 떠오르면서,, 복잡해도 할만해보이는데 생각보다 잘 진행이 안된다. 결국 구글링 천재가 되어가고 있다. ㅎㅎ;; 파이썬 코드 연습이 더 필요하고, 클라우드에 db 테이블 저장하는게 안되는데 왜그런지 모르겠다. 답답~ 일단 머리가 나쁘면 몸이 고생하는 듯이 만들어서 내긴 했다. ㅋㅋㅋ...이제 클라우드 연결...외않되???? ㅎ ㅏ

profile
느려도... 꾸준히.....🐌

0개의 댓글