2014-07-15 3 views
0

이것은 더 이상 this의 확장입니다.ORM을 사용하지 않는 피라미드와 SqlAlchemy. 세션 사용

나는 ORM없이 sqlalchemy를 사용하여 피라미드에서 프로젝트를 작성 중입니다.

from sqlalchemy.orm import (
    scoped_session, 
    sessionmaker, 
    ) 

from zope.sqlalchemy import ZopeTransactionExtension 

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

질문을 : 내가 작성해야 할 경우에만 SQL 문을 실행하려면 내가 요청이 이런게입니다 매번 커밋해야 실 거예요으로 나는 친절하게 세션 기능을 내가 그것을 구현하고 방법을 찾을 세션?

예인 경우 인 경우 DBSession을 사용하여 sqlstatement를 어떻게 수행 할 수 있습니까? 나는 동일한 작업을 수행하고 세션 zopeTransactionExtension() 당신이 사용하려는 경우

답변

0

예, 당신은 세션을 생성해야합니까 제공하는 모든 기능을 돌볼 수있는 방법을

없는 경우, "커밋 성공시 ZopeTransactionExtension으로 구성된 세션의 실패시 롤백 (roll back on failure) "동작을 사용합니다. SQLAlchemy도 함께

def my_view(request): 
    session = DBSession() 

    result = session.execute("""SELECT spam, eggs FROM blah WHERE moo='foo'""") 
    data = [] 
    for row in result: 
     data.append({ 
      'spam': row.spam, 
      'eggs': row.eggs 
     }) 
    return data 

이 세션에서 사용되는 기본 "엔진"과 "연결"에 접근 할 수도 있습니다, 그래서 당신은 트랜잭션 블록, 또는 특정 DB 연결을 사용하여 외부 쿼리를 실행할 수 있지만 아주 특수한 상황에서만 유용 할 수 있습니다.

어디서나 session.execute()을 사용하는 데 측정 가능한 오버 헤드가 있다고 생각하지 않습니다.

+0

나는 DBSession.execute ("" "select * from foo" "")를 시도했는데 괜찮 았던가? 'DBSession에서 세션 객체 생성'과 'DBSession을 직접 사용하는 것'사이에 어떤 차이가 있습니까? –

관련 문제