About Python – “Python DB API 2.0 (PEP 249) 와 sqlite3 module”
About Python – “Python DB API 2.0 (PEP 249) 와 sqlite3 module”
PEP란?
https://peps.python.org/pep-0001/
Python Enhancement Proposal – 직역하면 파이썬 향상 제안 은, 파이썬이라는 언어의 향상을 위해서 논의된 주제를 문서화한 것입니다.
예컨대, PEP8에는 다음과 같은 내용이 적혀있습니다.
실제로 위의 hello() 함수와 아래의 hello() 함수 모두 문법적으로는 오류가 없지만 들여쓰기의 레벨을 다르게 한 것을 볼 수 있죠? 여러 PEP 중, PEP8은 코드의 가독성과 일관성을 위해서 코딩 규칙을 정한 것, 예컨대 “들여쓰기는 공백 4칸으로 해라!” 라고 “가이드” 를 문서화한 것입니다.
PEP249
– Python Database API
이전의 포스팅(https://www.gdsanadevlog.com/14398) 에서는 블로그 게시물의 제목, 부제목, 내용 등을 파이썬 리스트에 저장했습니다. 하지만, 실제로 웹 애플리케이션을 개발할 때에는 MySQL, Oracle과 같은 데이터베이스를 이용합니다.
파이썬에는 데이터베이스와 연동할 수 있는 여러 가지 패키지들이 존재합니다. sqlite3, PyMySQL
처럼 말이죠!
그런데, 예를 들어 데이터베이스와 연결하는 메서드 이름이 어떤 모듈에서는 끼룩끼룩()
이고, 어떤 모듈에서는 꼬끼오()
로 정해져 있다고 가정해 봅시다. 이렇게 연결하는 메서드 이름이 달라도 동작은 제대로 하겠지만, 아무래도 일관성이 없죠. 만약 파이썬에서 “데이터베이스와 연동하는 메서드 이름은 끼룩끼룩()
으로 하기를 바랄게!” 라고 정해 준다면, 그리고 그 가이드를 따라서 모듈을 제작한다면, 일관성 있는 코드를 작성할 수 있을 겁니다. 게다가, 데이터베이스의 종류를 바꾸기도 쉽죠. 어떤 모듈을 쓰던 끼룩끼룩()
이라는 메서드 이름만 기억하면 되니까요.
실제로, Sqlite를 다룰 수 있는 파이썬 모듈인 sqlite3과 Mysql를 다룰 수 있는 파이썬 모듈인 PyMySQL은 PEP249의 권장사항을 따라서 제작되었습니다. 두 모듈 모두 데이터베이스와 연결하기 위한 메서드를 connect()
라는 이름으로 사용합니다. 데이터베이스와 연동하기 위해서, 이 모듈에서는 끼룩끼룩()
, 어떤 모듈에서는 꼬끼오()
라는 메서드 쓰지 말고 connect()
라는 메서드명을 사용하자~ 라는 것이죠.
pymysql에서도 connect() 를,
나중에 우리가 사용할, 그리고 소개드릴 sqlite3에서도 connect()
를 데이터베이스와 연결하기 위해서 사용하는 것을 볼 수 있죠?
Sqlite3
sqlite는 간단히 말해 굉장히 간단한 데이터베이스라고 할 수 있습니다.
그리고, 이 sqlite
라는 데이터베이스를 다루기 위해서 사용하는 파이썬 모듈이 바로 sqlite3입니다.
가상환경이 활성화 된 상태에서, 터미널에서 해당 폴더로 이동한 다음 ‘python’ 을 치면 파이썬 콘솔 창이 열리게 됩니다.
이후, 위의 명령어를 수행해 봅시다. 그러면, 아래와 같이 데이터베이스 하나가 만들어진 것을 볼 수 있습니다.
간단한 질의를 날려서, 데이터베이스가 실제로 변화하는 모습을 살펴볼 것입니다.
위의 작업을 수행해 봅시다. 그러면 실제로 같은 디렉토리에 있는 example.db
에 “게시물” 이라는 테이블이 만들어지는 걸 확인할 수 있습니다.
“게시물” 이라는 테이블을 하나 만들었으니, 이제 게시물 테이블에 게시물을 하나 넣어 볼까요? 다음의 작업을 수행합니다.
import sqlite3
conn = sqlite3.connect("first_database.db")
cur = conn.cursor()
cur.execute("INSERT INTO 게시물 VALUES ('안녕하세요.', '첫 번째 포스팅이네요!', '만나서 반갑습니다.', '2007-01-01 10:00:00', '2007-01-01 10:00:00')")
conn.commit()
conn.close()
위의 코드를 작성 후 실행하면, 아래와 같이 데이터베이스에 값이 잘 들어가있는 것을 볼 수 있습니다.
이렇게 sqlite이라는 데이터베이스를 다루기 위해서는 PEP 249를 준수해 만들어진 sqlite3 모듈을 이용해서, 질의문을 날릴 수 있었습니다. 물론, 우리가 앞으로 플라스크를 통해 블로그 앱을 작성할 때에는 위처럼 하나하나 쿼리를 날리진 않을 것입니다. 작성된 파이썬 코드를, 데이터베이스와 연관시켜 자동으로 데이터베이스에 반영되도록 해 보겠습니다. 다음 포스팅은, 파이썬 ORM에 관한 것입니다.