2013-12-08 8 views
2

위한 before_request 및 teardown_request, DB 연결 개폐 각 세션 전에한다 : sqlite3를 사용시플라스크는 Flaskr 튜토리얼 따르면 DB 연결

@app.before_request 
def before_request(): 
    g.db = connect_db() 

@app.teardown_request 
def teardown_request(exception): 
    db = getattr(g, 'db', None) 
    if db is not None: 
    db.close() 

하지만,이 경우이다.

내 질문은 : postressql과 SqlAlchemy를 사용하는 경우 - 같은 방식으로 연결을 열거 나 닫아야합니까, 아니면 SQLAlchemy가 연결 관리를 자동으로 처리합니까?

+4

Flask-SQLAlchemy는 DB 연결 풀을 관리하므로 걱정할 필요가 없습니다. – Miguel

+0

미구엘에게 감사드립니다. 후속 조치 : sqlalchemy & postgres를 사용할 때 모델에 대해 _init_ 생성자를 명시 적으로 정의해야합니까? 당신의 메가 튜토리얼에서는 하나를 사용하지 않지만 __init__을 생략하면 "TypeError : __init __()은 정확히 1 개의 인수 (주어진 5 개)"오류를 갖습니다. – NightOwl

+1

SQLAlchemy는 또한 모델에 대한 기본 생성자를 제공합니다. 이 기본 생성자는 모델의 속성을 초기화하는'** kwargs'를 사용합니다. 나는 왜 당신이'TypeError'를 얻었는지 이해하지 못한다. 스택 트레이스에서 SQLAlchemy가 정의한 생성자의 타입이 아닌 하나의 인자를 취하는이'__init __()'생성자가 어디에 있는지 살펴 본다. – Miguel

답변

2

SQLAlchemy는 Flask 응용 프로그램에 대해 알지 못합니다. 따라서 순수한 SQLAlchemy를 사용하려면 연결을 관리해야합니다.

DB 연결, 지속적인 연결 및 연결 풀링에 대한 충분한 지식 없이도 이러한 항목을 직접 처리하면 성능 및 오류가 매우 저하 될 수 있습니다. Flask-SQLAlchemy을 사용하여 db 연결 관리를 추상화하는 것이 가장 좋습니다.