DataBase Application Programming Interface의 약자
Interface란 : 상호작용을 위해 만들어진 약속
API : 개발기능을 위해서 사용자에게 제공하는 코드와 문서 같은 세트를 의미한다.
파이썬을 활용한 DB연결
DBAPI v2.0에 대한 문서
파이썬은 DB와 연결하는 파이썬 모듈들을 가이드라인을 따라 제작되도록 안내한다. (함수,메소드,파라미터,키워드등)
가이드라인 덕분에 동일한 API로 다양한 데이터베이스 이용가능
PEP는 파이썬이 향상되기 위한 제안들이다.
파이썬과 함께 설치되는 가벼운 파일형 관계형 DB
서버형 DB에 비해 기능이 제한적이다. (기능적 제한으로 고급쿼리등은 실행하기 어렵다)
파일형이므로 실행중인 프로그램의 메모리에 상주할 수 있기에 삭제나 프로세스 종료로 인한 데이터 손실도 생긴다.
간단하게 DB를 구축하거나 단순한 실험하기에는 좋다.
파이썬 2.5x 이후로 기본적으로 설치되는 모듈인 sqlite3를 이용한다.
import sqlite3
conn = sqlite3.connect('test.db')
import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute("""CREATE TABLE test_table (
name VARCHAR(32),
age INT);
""")
# 여러개의 레코드 추가할때는 아래 같은 코드 사용가능
cur.execute("INSERT INTO test_table (name, age) VALUES (?, ?)",(name,age)))
users = [('lemon', 10),
('apple', 15)]
for user in users:
cur.execute("INSERT INTO test_table (name, age) VALUES (?, ?);", user
위의 과정들이 끝난뒤 DB에 입력
1) con.commit : 현재 트랜잭션을 커밋한다. 호출되지 않으면 마지막 commit()이후에 수행한 작업은 볼 수 없다.
2) commit 은 데이터베이스 연결에 대한 Connection 객체를 통해 사용가능하다.
3) type(conn) : class 'sqlite3.connect({DB이름})으로 나타난다.
cursor.fetchone, cursor.fetchall
추가한 데이터를 조회한다.
1) 아래와 같은 코드만 실행하면 데이터를 조회할 수 없다.
2) fetchone, fetchmany, fetchall를 추가적으로 실행해서 가져올 수 있다.
3) 두번째 코드는 리스트 형식으로 쿼리를 통해 실행된 결과를 리턴한다.
4) fetchone을 통해 연속으로 데이터를 조회하면 레코드 순서대로 데이터가 출력된다.
cur.execute("SELECT * FROM test_table;")
cur.fetchall()
원격이 아닌 직접 설치해 운영하는 방식을 뜻한다.
대부분의 클라우드서버는 온프레미스 방식보다 관리비용이 적게 들어간다.
하지만 정보보안 속도를 위해 온프레미스 방식이 활용되기도 한다.
원격으로 관리되는 데이터베이스이다.
접근할 때 DB에 대한 접근정보가 있어야한다.
여러명이 접속할 수 있기에 협업등에 이용가능하다.
보안, 서버이용비용, 서버 에러 생길시 직접적인 해결불가하다.
보통 원격으로 연결할때 이용하는 형식
논리적 혹은 물리적 리소스를 찾을 때 사용
네트워크에서 정보를 찾거나 받아올 때도 사용가능하다.
URI는 (서비스://유저이름:유저비밀번호@호스트:포트번호/경로 혹은 데이터베이스 이름) 의 형식으로 이루어진다.
URL은 URI의 하위계층이다.
서비스는 제한적이지만 무료로 클라우드 postgres 데이터베이스를 제공한다.
(elephantSQL무료버전은 동시실행 connection수가 제한되어있으니 유의)
url 로 접속해도 괜찮고 직접 서버, 데이터베이스, 유저, 비밀번호 등을 입력해서 접속해도 동일하다.
ElephantSQL 연결
1) PC의 주소에 연결된 프로그램마다 지정된 포트번호가 다르다.
2) 일반적으로 postgreSQL은 5432포트를 이용한다.
객체-관계형 데이터베이스 관리 시스템
Postgre 연결
Postgre의 서버는 클라우드 데이터베이스에서 생성한 elephantDB 를 대상으로 한다.
설치
데이터베이스에 맞는 파이썬 라이브러리의 설치가 필요하다. (Postgre 와 같은 경우에는 psycopg2 를 설치)
1) pip install psycopg2 가 제대로 동작하지 않을경우 pip install psycopg2-binary를 이용
데이터베이스 연결
1) sqlite3 보다 설정이 조금 더 있다.
2) 데이터베이스 서버 주소, 유저 이름, 비밀번호, 포트번호를 설정해야한다.
3) 코드를 작성할시 DB와 연결된다.
4) 이후의 상호작용은 동일하다.
5) postgreSQL 에서는 SQLite의 ?대신 %s를 이용하므로 주의
import psycopg2
conn = psycopg2.connect(
host="서버 호스트 주소",
database="데이터베이스 이름",
user="유저 이름",
password="유저 비밀번호")