2013-09-03 1 views
4

기본적으로 Flask 응용 프로그램 (REST API 용)과 비 Flask API 사이에서 최대한 많은 데이터베이스 계층 코드를 공유하려고합니다.Flask와 Flask가 아닌 프로그램에서 동일한 데이터베이스 추상화 사용

pure Python API (웹 Python이 아닌 응용 프로그램에서 가져 오기 위해 사용됨)와 REST API Flask 데몬 모두에서 동일한 Flask-SQLAlchemy 계층을 사용하는 것이 좋습니다.

"나는 Flask 응용 프로그램과 별도의 Python 가져 오기 라이브러리간에 데이터베이스 모델을 가장 잘 공유하려면 어떻게해야합니까?"라는 문구는 다른 구문으로 추측합니다.


또는 가져 오기 라이브러리와 SQL 추상화를 공유하려는 경우 Flask REST API에 Flask-SQLAlchemy을 사용하는 데있어 다른 점도 있습니다. 일반 SQLAlchemy을 사용하는 것이 더 좋습니까?


사용 사례 : 우리는 많은 테이블이 큰 데이터베이스를 가지고 있고, 데이터베이스에 액세스하기위한 (고객 액세스 용) REST API와 (확대됨에 내부 도구) 파이썬 가져 오기 라이브러리를 모두 구축하고자하지만,의 물론 그들 사이에 많은 코드를 공유 할 수 있습니다.

관련 :

+0

세 가지 선택이 있습니다. 1. Flask-SQLAlchemy를 사용하여 데이터베이스 계층을 설정하고 Flask 응용 프로그램 컨텍스트를 라이브러리의 일부로 사용하십시오. 2.) 두 개의 코드베이스 (Flask와 Flask가 아닌)를 만듭니다. 3.) 공통 라이브러리를 만들지 만, 라이브러리를 사용하려면 SQLAlchemy 세션을 의존성 삽입 (dependency injection)과 같은 방식으로 전달해야합니다. Flask 프로세스에서 Flask 앱 컨텍스트를 사용하여 라이브러리를 초기화합니다. 그렇지 않으면, 다른 프로그램에서 SQLA 세션을 설정하십시오. 다음 세 가지 방법 중 어느 것을 선택하면 환경에 매우 특정한 것인지 알 수 있으므로 "올바른"대답은 없습니다. –

답변

1

는 플라스크 응용 프로그램과 전화를 만드는 문제이다

app.test_request_context().push() 

여기에서 요점은 "비 웹"라이브러리로 수행 할 작업입니다. 라이브러리를 사용해야 할 때 전체 Flask 라이브러리를 설치하는 것이 문제가되지 않는다면 그런 식으로 사용하는 데 전혀 문제가 없습니다.

다른 세션, 동시성 등과 같은 라이브러리 데이터 액세스 코드에서 성능을 향상 시키려면 초기 코드를 수정해야 완전히 다른 시나리오가됩니다. 이 경우 pure-SQLAlchemy 방식이 더 좋을 수도 있지만 실제로는 두 패턴의 차이점에 따라 달라집니다.

일반적으로 모델에는 메서드가 있고 두 개의 다른 ORM 패턴 (Flask-SQLAlchemy 래퍼 모델 및 순수 SQLAlchemy)을 사용하면 코드가 중복된다는 의미입니다.

+0

소원 나는 이것을 두 번 upvote 수 있습니다. –