SQLAlchemy에 익숙하지 않아서, 나는 언제쯤 Session()
을 호출해야하는지 궁금해했다. 전역 변수로 정의해야합니까? 아니면 각 요청에 대해 새 세션을 만들어야합니다.SqlAlchemy - 언제 새로운 세션 생성을해야합니까?
답변
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
데이터베이스에 대한 업데이트 (예 : 자동 증가 기본 키)가 필요할 때 세션을 기억하십시오.
이 자습서는이 모든 것을 확장합니다.
실제로 sqlalchemy 문서를 더 읽고 나면 각 질문마다 새로운 상황 별 세션을 만들어야하는 제 질문에 대한 정답을 발견했습니다. http://docs.sqlalchemy.org/en/rel_0_7/orm/session.html#lifespan-of-a-contextual-session
그리고 내 답변과 어떻게 다른가요? –
당신의 답변에서 귀하의 코드는 DBSession이 직접 사용되어야한다고 말하면서 문서에서 각 요청에 대해 상황 별 세션을 생성해야한다고 명시합니다. 따라서 : @view_config() def get_view (request) : session = DBSession() 따라서 요청마다 새 세션을 만듭니다. – Wiz
제가 연계 된 튜토리얼을 읽으십시오. https://github.com/Pylons/pyramid/blob/master/docs/tutorials/wiki2/src/basiclayout/tutorial/views.py –
- 1. SQLAlchemy, 언제 커밋합니까?
- 2. INSERT IGNORE가있는 SQLAlchemy 세션 쿼리
- 3. 언제 세션 ID를 재생성해야합니까?
- 4. 언제 새로운 저장소를 만들어야하겠습니까?
- 5. 언제 새로운 활동을 만들어야합니까?
- 6. sqlalchemy : 세션 커밋 오류 - 'SessionMaker'개체에 '_model_changes'속성이 없습니다.
- 7. 지연된 셀러리 작업에서 SQLAlchemy 세션 처리
- 8. SQLAlchemy : 커밋 후에도 세션 쿼리가 계속 작동합니까?
- 9. 컨트롤러의 세션 속성은 언제 초기화됩니까?
- 10. 새로운 비추천 코드를 언제 삭제합니까?
- 11. 레일스에서 새로운 세션 감지하기
- 12. NHibernate 세션 : 몇 개입니까? 언제 만들까요? 언제 닫을까요?
- 13. knitr에서 새로운 R 세션 시작
- 14. 레일 (ActiveRecord 세션 및 안정 인증) : 세션 테이블에 언제 기록됩니까?
- 15. SqlAlchemy IntegrityError
- 16. Oracle 세션 임시 테이블의 데이터는 언제 삭제됩니까?
- 17. greendao greenDao가 세션 캐시에서 데이터베이스를 언제 업데이트합니까?
- 18. Struts가 세션 토큰을 얻는 방법을 언제 변경해야합니까?
- 19. 언제 요청 당 세션 패턴을 사용해야합니까?
- 20. ViewFlipper 또는 새로운 활동을 언제 사용합니까?
- 21. 언제 새로운 병렬 루프 함수를 사용해야합니까?
- 22. 안드로이드에서 새로운 서비스가 언제 준비되는지 알고 싶으십니까?
- 23. SQLAlchemy 다중 스레드 응용 프로그램에서 적절한 세션 처리
- 24. SQLAlchemy sqlalchemy.sql.expression.select 대 sqlalchemy.sql.expression.Select
- 25. SQLAlchemy : 누가 "세션"을 담당합니까? (그리고 세션으로 단위 테스트하는 방법)
- 26. 루프에서 SQLAlchemy 세션 개체를 사용하여 데이터를 커밋하는 동안 문제가 발생했습니다.
- 27. 다중 스레드 및 Sqlalchemy
- 28. 새로운 PHP 페이스 북 라이브러리 재사용 세션
- 29. 모든 도메인 이름에 대한 새로운 세션
- 30. 세션 공격, 새로운 유형의 공격은 무엇입니까?
단지'pyramid_tm'가 활성화되거나'transaction' 패키지를 인식하는 다른 트랜잭션 관리자에서만 작동한다는 작은 메모를 추가하고 싶습니다. :-) –
@MichaelMerickel : 참으로; 자습서는 활성화되었는지 확인합니다. 튜토리얼은 단순한 SO 응답보다 훨씬 포괄적입니다. :-) –