API(Application Programming Interface)
한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법
(Interface → 계약, 약속. rule을 만들어둔 것)
어떤 api를 사용할지 menu를 통해 보는 것
고객이 메뉴를 보고 웨이터에게 요청 웨이터는 주방에 요청
DB와 프로그래밍 언어(python)가 서로 소통(상호작용)할 수 있게 만들어 주는 것
python을 통해 DB에 접근하고 for문 같은 python의 기능들과 연계하여 확장성을 제공해준다.
sqlite의 sqlite3 / postgreSQL의 psycopg2
PEP(Python Enhancement Proposal)
파이썬이 개선되도록 하는 제안, 제안을 통해 어떤 표준이 정해짐
URI(Uniform Resource Identifier)
RF : https://velog.io/@younoah/uri-url-urn
URL : 접근할 수 있도록 https://사용
URN : 경로만 주고, 외부에서 접근할 수 있도록 X = 어떻게 접근할 것인지 명시하지 않음
clound Base : 사용만 하는 것, 규칙에 따라야함 → 보안 좋음
On-Premise : 로컬 서버에 데이터 저장, 자유도
IP를 할당받았을때 다양한 서비스를 이용할 수 있게끔 기본 베이스가 되는 것
하나의 머신에서 포트번호를 통해 여러 프로토콜들을 사용할 수 있다
데이터를 fetch한다 = 데이터를 가져온다
커서가 가르키는 위치부터 단계별로 이동, 묶음으로 이동하며 데이터를 처리하는 개념으로 fetch 이해
IF NOT EXISTS : 테이블 있으면 안만들게~
(?,?) → %s, %s
fetchall() : 범위에 있는거 다 가져와
오후수업
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
서비스 사용 : 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
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 테이블 저장하는게 안되는데 왜그런지 모르겠다. 답답~ 일단 머리가 나쁘면 몸이 고생하는 듯이 만들어서 내긴 했다. ㅋㅋㅋ...이제 클라우드 연결...외않되???? ㅎ ㅏ