데이터베이스 액세스를 위해 SQLAlchemy를 사용하는 Python 서버 응용 프로그램에서 작업하고 있습니다. 나는 데이터베이스 (Pylons 협약과 같은)에 접근하기 위해 프로그램 전체에서 사용되는 meta.py 모듈에 엔진, 세션 및 메타 데이터 객체를 갖고 싶습니다.파이썬에서 모듈 수준의 객체를 변경하려면 어떻게해야합니까? (Pylons 메타 오브젝트와 같이)
엔진 및 세션 객체는 meta.py 모듈에서 None
으로 초기화되고 실제로 다른 모듈의 실제 값이 할당됩니다. 예 :
model/meta.py
engine = None
Session = None
metadata = Metadata()
model/__init__.py
: 내가 가져오고 meta.py에서 세션을 가져 오려면 다음, 다른 모듈에 init_model()
을 실행할 때
from simplesite.model import meta
def init_model():
# ...
sm = orm.sessionmaker(...)
meta.Session = orm.scoped_session(sm)
문제는 그것이 여전히 없음으로 설정되어 있습니다. 나는.
from model.meta import Session
from model import init_model
init_model()
# Session is still None!
누군가 이것이 왜 Pylons 응용 프로그램에서 어떻게 작동하는지 및/또는 어떻게 작동하는지 말해 줄 수 있습니까? 파이썬이 어떻게 작동하는지에 대한 대답이 더 근원적 일 것이라고 생각합니다.
응용 프로그램 전체에 단일 데이터베이스 액세스 권한을 부여하는 방법에 대한 대안 (예 : 대규모 응용 프로그램에서 SQLAlchemy를 사용하는 최상의 방법)도 고려해보십시오.
이 괜찮습니다. 문제는'from model.meta import Session'은'meta.Session'의 값을'Session' 이름에 바인딩하고,'meta.Session' 이름이 바뀌면 바뀌지 않는다는 것입니다. 대신'model import meta'에서'Session'을'meta.Session'으로 찾아보기 만하면됩니다. – katrielalex
사실, 다른 모듈의 코드가 로컬 변수를 바꿀 수 있다면 얼마나 불쾌 할 지 생각해 보라 !!_ !! – katrielalex
고마워, 그게 내가 찾고 있던 대답이었다. 지금은 모델 가져 오기 메타를 사용하고 있습니다. 메타 세션으로 객체를 참조하면 작동합니다. – user1405990