[Python] DB API

Python DB API

PEP 249

  • 파이썬에서 명시하는 DBAPI v2.0에 대한 문서
  • 파이썬에서는 DB와 연결하는 파이썬 모듈은 권장되는 가이드라인을 따라 제작되도록 안내한다.
  • 명시적인 가이드라인 덕에 파이썬에서 DB와 연결하는 작업은 다양한 DB라도 동일한 API를 이용해 데이터를 다룰 수 있다.

SQLite

  • 기본적으로 파이썬과 함께 설치되는 가벼운 RDB
  • 기능이 제한적
  • PostgreSQL과 같이 DB Server를 띄우고 작업하지 않으면 기능적 제한으로 복잡하거나 고급 쿼리 등은 실행하기 어렵다.
  • 파일형 DB이며 메모리에 상주할 수 있기 때문에 파일을 삭제하거나 프로세스 종료 등으로 인한 데이터 손실도 주의해야 한다.
  • 장점은 간단하고 빠르게 DB를 구축하거나 개발 단계에서 단순한 실험 등을 진행하기에 큰 무리가 없다.

DB연결

  • SQLite3의 connect 메소드를 활용해 DB File의 위치를 알려주면 된다.
1
2
3
4
5
import sqlite3

conn = sqlite3.connect('test.db') # DB File이 없으면 생성, 있으면 연결

conn = sqlite3.connect(':memory:') # 메모리에서도 실행 가능
  • 파일의 확장자는 .db, .sqlite3등의 옵션이 있다.
  • 연결 후 conn은 DB와 연결된 하나의 세션을 보관한다.
    • 세션 : 디비버의 커넥션과 비슷한 개념
  • 해당 세션을 통해 DB와 소통하기 위한 cursur를 생성한다.
    • 커서 : 디비버의 실행과 비슷한 개념
1
cur = conn.cursor()

커서 메소드

cursor.execute

  • 기본적인 DB 소통 방식은 커서의 execute메소드 활용
  • SQL의 쿼리문을 바로 넘겨줄 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cur.execute("""CREATE TABLE test_table (
                name VARCHAR(32),
                age INT);
            """)

"""CREATE TABLE test_table (
    name VARCHAR(32),
    age INT);
"""

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

# 데이터 추가2
name = 'banana'
age = 13

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

# 데이터 추가3
users = [('lemon', 10),
         ('apple', 15)]

for user in users:
    cur.execute("INSERT INTO test_table (name, age) VALUES (?, ?);", user)

con.commit

  • 트랜잭션 커밋
1
conn.commit()

cursor.fetchone, cursor.fetchall

  • 추가한 데이터 조회
1
2
3
cur.execute("SELECT * FROM test_table;")

cur.fetchall()
  • fetchall을 하게 된다면 리스트 형식으로 쿼리를 통해 실행된 결과를 리턴한다.
  • fetchone을 하게 된다면 데이터베이스에서 전달하는 결과에서 첫번째만 리턴한다.

Cloud DB

  • Postgres 온라인으로 만든 뒤 연결

URI

  • 논리적 혹은 물리적 리소스를 찾을 때 사용된다.
  • 네트워크에서 정보를 찾거나 받아올 때 사용된다.
1
2
서비스://유저_이름:유저_비밀번호@호스트:포트번호/경로
postgres://fqislexi:*****@chunee.db.elephantsql.com/fqislexi

ElephantSQL

  • 제한적이지만 무료로 클라우드 postgres 데이터베이스를 제공

PostgrSQL

Postgre 연결

psycopg2 설치

1
$ pip install psycopg2-binary

DB 연결

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import psycopg2

conn = psycopg2.connect(
    host="서버 호스트 주소",
    database="데이터베이스 이름",
    user="유저 이름",
    password="유저 비밀번호")


# sample.py
import psycopg2

conn = psycopg2.connect(
    host="chunee.db.elephantsql.com",
    database="fqislexi",
    user="fqislexi",
    password="6pgNvWfm3XLnJK_t0dsyph8i1GnIMx_T")

print(conn)

cur.execute("""CREATE TABLE test_table (
                name VARCHAR(32),
                age INT);
            """)

cur.execute("INSERT INTO test_table (name, age) VALUES ('spongebob', 12);")

name = 'banana'
age = 13

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

conn.commit()
0%