2012-07-04 2 views

답변

8

Pyramid SQLAlchemy tutorial을 따르는 것이 좋습니다. 간단한 Wiki 응용 프로그램에서 Pyramid와 함께 SQLAlchemy를 사용하는 방법을 알려줍니다.

튜토리얼 models.py 모듈이 생성되어 DBSession 항목을 정의합니다. 이렇게하면 피라미드 스레드에 범위 및 피라미드의 트랜잭션 모델에 묶여의 SQLAlchemy의 세션에 액세스 할 수 있습니다, 당신은 세션 필요할 때마다 이는 가져 : models.py에서

from pyramid.view import view_config 

from .models import (
    DBSession, 
    MyModel, 
    ) 

@view_config(route_name='home', renderer='templates/mytemplate.pt') 
def my_view(request): 
    one = DBSession.query(MyModel).filter(MyModel.name=='one').first() 
    return {'one':one, 'project':'tutorial'} 

DBSession 변수가 정의를 다음과 같이

from sqlalchemy.orm import (
    scoped_session, 
    sessionmaker, 
    ) 

from zope.sqlalchemy import ZopeTransactionExtension 

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) 

참고 : ZopeTransactionExtension; Pyramid는 각 요청에 대해 자동으로 새 트랜잭션을 시작하여 성공한 응답에 커밋하고 예외가 발생하면 트랜잭션을 중단합니다. 이렇게하면 대부분의 거래 처리 의무가 완화됩니다. .flush 데이터베이스에 대한 업데이트 (예 : 자동 증가 기본 키)가 필요할 때 세션을 기억하십시오.

이 자습서는이 모든 것을 확장합니다.

+0

단지'pyramid_tm'가 활성화되거나'transaction' 패키지를 인식하는 다른 트랜잭션 관리자에서만 작동한다는 작은 메모를 추가하고 싶습니다. :-) –

+0

@MichaelMerickel : 참으로; 자습서는 활성화되었는지 확인합니다. 튜토리얼은 단순한 SO 응답보다 훨씬 포괄적입니다. :-) –

1

실제로 sqlalchemy 문서를 더 읽고 나면 각 질문마다 새로운 상황 별 세션을 만들어야하는 제 질문에 대한 정답을 발견했습니다. http://docs.sqlalchemy.org/en/rel_0_7/orm/session.html#lifespan-of-a-contextual-session

+0

그리고 내 답변과 어떻게 다른가요? –

+0

당신의 답변에서 귀하의 코드는 DBSession이 직접 사용되어야한다고 말하면서 문서에서 각 요청에 대해 상황 별 세션을 생성해야한다고 명시합니다. 따라서 : @view_config() def get_view (request) : session = DBSession() 따라서 요청마다 새 세션을 만듭니다. – Wiz

+0

제가 연계 된 튜토리얼을 읽으십시오. https://github.com/Pylons/pyramid/blob/master/docs/tutorials/wiki2/src/basiclayout/tutorial/views.py –

관련 문제