Pyramid에서 SQLAlchemy를 사용하는 데 문제가 있습니다. 내가 필요한 것을 찾을 수는 있지만, 일반적으로 매우 짧고 부족합니다. 그래서 나는 거의 의미가없는 뾰족한 코드로 끝났습니다. 그래서 나는 누군가가 내가해야 할 일에 대한 완전한 예를 보여 주길 바란다.뷰 당 데이터베이스 변경 및 뷰 당 여러 데이터베이스 액세스
동일한 스키마를 가진 4 개의 데이터베이스가 있습니다. 한 피라미드 앱에서 작업 할 수 있기를 원합니다. 때로는 모든 4 개의 데이터베이스에서 모든 "주문"을 나열하고 때로는 "site1"의 모든 "주문"을 나열하고 싶습니다. 스키마가 동일하므로 데이터베이스에 대해서도 동일한 모델 클래스를 사용합니다.
전 sqlahelper와 일반 SQLAlchemy를 사용해 보았습니다. 아래의 코드는 sqlahelper를 사용하지만 작동 아무것도 사용하는 것이 행복 해요 :
__init__.py
site1_eng = engine_from_config(settings, prefix='site1.')
site2_eng = engine_from_config(settings, prefix='site2.')
site3_eng = engine_from_config(settings, prefix='site3.')
sqlahelper.add_engine(site1_eng, 'site1_eng')
sqlahelper.add_engine(site2_eng, 'site2_eng')
views.py 어떻게됩니까
def site_orders(request):
site = request.matchdict['site']
db_eng = sqlahelper.get_engine(("%s_eng" % (site)))
conn = db_eng.connect()
dbsession = sqlahelper.get_session()
dbsession.configure(bind=conn)
orders = dbsession.query(Order).order_by(Order.cdate.desc())[:100]
return dict(orders=orders, pagetitle=(site+" Orders"))
를?
글쎄 나는 URL에 따라 데이터베이스를 바꿀 것이기를 바랐다. 그러나 어떤 것이 선택되는지는 완전히 무작위로 보인다. 그래서/orders/site1 /은 때때로 site2 데이터베이스로 가고 때로는 site3으로 간다. 새로 고침은 매번 선택하는 데이터베이스를 전환합니다. 다른 URL과 동일합니다.
거의 마치 세션이 데이터베이스에 바인딩되지 않고 그 시점에서 세션 중 어떤 상황이든 피킹 중입니까? 그것은 이해가되지 않을 수도 있습니다 - SQLAlchemy에 대한 나의 이해는 크지 않습니다.
보기에서 데이터베이스를 쉽고 빠르게 전환 할 수있는 기능을 제공하므로 누군가를 도울 수 있기를 바랍니다. 현재는 제어가 불가능한 것처럼 보입니다.
참고 : 내가 원래 다음 사용 된 피라미드 SQLA + URL 디스패처 튜토리얼 변경하려고 않았다
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
하지만 sqlahelper을 찾을 때 제거합니다. 내가 그것을 사용해야한다면 나에게 알려줘.