SQLAlchemy
파이썬 코드에서 DB와 연결하기 위해서 사용할 수 있는 다양한 라이브러리가 있는 데, 그중 SQLAlchemy라는 라이브러리가 파이썬에서 가장 널리 쓰이는 라이브러리 중 하나다.
SQLAlchemy 라이브러리를 사용하여 파이썬 코드에서 데이터베이스에 연결하여 SQL을 실행시킬 수 있다.
SQLAlchemy는 ORM(Object Relational Mapper)이다.
ORM이란, 간략하게 설명하자면 관계형 데이터베이스의 테이블들을 프로그래밍 언어의 클래스로 표현할 수 있게 해주는 것을 말한다.
즉 클래스를 사용해서 테이블들을 표현하고 데이터를 저장, 읽기, 업데이트 등을 할 수 있게 해 준다.
하지만 이 책에서는 ORM 부분은 사용하지 않고 CORE 부분만을 사용할 것이며, 데이터베이스를 사용하는 것은 직접 SQL을 작성해서 할 것이다. 그렇게 하는 이유는 처음부터 ORM을 사용하여 SQL을 배울 수가 없어서다.
ORM은 사용하는 것의 여부는 개인의 취향에 따라 결정하면 되지만, SQL에 먼저 익숙해지는 것이 중요하다.
SQLAlchemy 설치
SQLAlchemy는 다음 pip 명령어를 사용해서 설치하면 된다.
물론 파이썬 가상 환경을 활성화 하는 것을 잊지 말자.
SQLAlchemy에서 MySQL을 사용하기 위해서는 MySQL용 DBAPI 또한 설치해야 한다.
DBAPI는 이름 그대로 DB를 사용하기 위한 API다. DBAPI를 설치해야 해당 데이터베이스를 사용할 수 있다.
MySQL용 DBAPI는 여러 가지가 있는 데, 그중 MySQL의 공식 파이썬 DBAPI인 MySQL-Connector를 사용하도록 하자.
앞서 언급했듯이 SQLAlchemy를 사용하여 데이터베이스에 연결하여 SQL을 실행시켜 데이터베이스로부터 데이터를 읽어 들이거나 생성하거나 할 수 있다.
SQLAlchemy를 사용하여 API와 데이터베이스 연결하기
이제 실제로 우리의 미니터 API를 MySQL 데이터베이스에 연결하도록 하자.
먼저, 데이터베이스의 연결 정보를 저장할 파일을 만들어야 한다. config.py라는 이름으로 새로운 파일을 만들도록 하자.
그리고 다음처럼 데이터베이스 연결 정보를 저장하도록 하자.
'user': 'root'
데이터베이스에 접속할 사용자 아이디
'password': 'test1234'
사용자의 비밀번호
'host': 'localhost'
접속할 데이터베이스의 주소다. 지금은 같은 컴퓨터에 설치되어 있는 데이터베이스에 접속하므로 localhost로 지정해 두었다. 만일 외부 서버에 설치되어 있는 데이터베이스에 접속한다면 해당 서버의 주소를 지정해주어야 한다.
'port': 3306
접속할 데이터베이스의 포트 넘버다. 관계형 데이터베이스는 주로 3306 포트를 통해 연결된다. API나 사이트와 마찬가지로 데이터베이스도 네트워크를 통해 연결되는 시스템이므로 당연히 포트 정보가 필요하다.
'database': 'miniter'
실제 사용할 데이터베이스 이름
이제 app.py 파일을 수정하여 config.py 파일에서 데이터베이스 설정 정보를 읽어 들여 데이터베이스와 연결하도록 할 것이다. 이미 본 대로 sqlalchemy의 create_engine을 사용하여 데이터베이스 연결한다.
def create_app(test_config = None): app = Flask(__name__)
create_app이라는 함수를 정의한다. Flask가 create_app이라는 이름의 함수를 자동으로 팩토리 함수로 인식해서 해당 함수를 통해 Flask를 실행시킨다. 또 한가지 중요한 것은 create_app 함수가 test_config라는 인자를 받는다는 것이다. 단위 테스트를 실행시킬 때 테스트용 데이터베이스 등의 테스트 설정 정보를 적용하기 위함이다.
if test_config is None: app.config.from_pyfile("config.py")
만일 test_config 인자가 None이면 config.py 파일에서 설정을 읽어들인다. 만일 test_config 인자가 None이 아니라면 즉 test_config 값이 설정되어 들어왔다면 test_config 의 설정을 적용시킨다.
database = create_engine(app.config['DB_URL'], encoding = 'utf-8', max_overflow = 0)
splalchemy의 create_engine 함수를 사용해 데이터베이스와 연결을 한다.
app.database = database
위에서 생성한 Engine 객체를 Flask 객체에 저장함으로써 create_app 함수 외부에서도 데이터베이스를 사용할 수 있게 한다.
return app
Flask 객체를 리턴한다. 앞서 언급했듯이 create_app이라는 함수는 Flask가 자동 인지하여서 Flask 객체를 찾아서 실행될 수 있게 한다.
create_app 함수 안에 엔드포인트를 구현할 것이다. 그리고 엔드포인트들을 구현할 때 앞 서 본대로, sqlalchemy를 사용하여 MySQL 데이터베이스에 연결하여 데이터를 데이터베이스에 저장 및 읽어들이도록 할 것이다.
이제 각종 엔드 포인트를 데이터 베이스를 사용하여 구현해볼 것이다!
구현하는 것은 다음 포스팅에서 ~
전체 코드는 "깔끔한 파이썬 탄탄한 백엔드" 책의 깃허브 리포지토리에서 확인할 수 있다.
'백엔드' 카테고리의 다른 글
API : 인증 (0) | 2021.08.22 |
---|---|
엔드포인트 데이터베이스 사용하여 구현하기 (0) | 2021.08.17 |
API에 데이터베이스 연결하기 (0) | 2021.08.16 |
SQL(Structured Query Language) (0) | 2021.08.10 |
데이터베이스(Database) (0) | 2021.08.10 |