외부 응용 프로그램의 데이터로 미리 작성된 여러 sqlite3 데이터베이스를 사용하는 응용 프로그램을 수행하고 있습니다. 각 데이터베이스는 테이블이 동일하지만 데이터가 다릅니다.런타임 동안 TG2의 데이터베이스 전환
사용자 입력에 따라 이러한 데이터베이스간에 전환 할 수 있기를 원합니다. TurboGears 2에서 가장 우아한 방법은 무엇입니까?
외부 응용 프로그램의 데이터로 미리 작성된 여러 sqlite3 데이터베이스를 사용하는 응용 프로그램을 수행하고 있습니다. 각 데이터베이스는 테이블이 동일하지만 데이터가 다릅니다.런타임 동안 TG2의 데이터베이스 전환
사용자 입력에 따라 이러한 데이터베이스간에 전환 할 수 있기를 원합니다. TurboGears 2에서 가장 우아한 방법은 무엇입니까?
모든 데이터베이스가 동일한 스키마를 가지고 있다면 동일한 모델을 사용하여 여러 DB에 여러 개의 세션을 생성 할 수 있어야합니다.
Dzhelil,
나는 블로그가 다시 TG2에서 여러 데이터베이스를 사용하는 방법에 대해 잠시 게시 썼다. 이 방법을 여러 개의 DBSession에 대한 Jorge의 제안과 결합하여 쉽게 수행 할 수 있다고 생각합니다. 이 도움이
How to use multiple databases in TurboGears 2.0
희망, 내가 읽기 전용 응용 프로그램이 데이터베이스를 사용하고 세스
. 두 번째 데이터베이스는 기본 데이터베이스가 다운 된 경우 캐시입니다. 두 객체를 사용하여 연결, 메타 데이터 및 호환 가능한 Table
인스턴스를 보유합니다. 뷰 함수의 맨 위는 db = primary
또는 db = secondary
이며 나머지는 db.tableA.join(db.tableB)
에 대한 쿼리입니다. ORM을 사용하지 않습니다.
스키마는 완전히 동일하지 않습니다. 기본 데이터베이스는 schema.
(Table(...schema='schema')
)이며 캐시 데이터베이스는 필요하지 않습니다. 이 문제를 해결하기 위해 스키마 이름을 인수로 사용하는 함수에서 테이블 개체를 만듭니다. 각 데이터베이스에 대해 함수를 한 번 호출하면 호환 접두사 및 접두사가없는 Table
개체와 호환됩니다.
적어도 Pylons에서 SQLAlchemy meta.Session
은 ScopedSession
입니다. 응용 프로그램의 BaseController
은 appname/lib/base.py
으로 각 요청 후 Session.remove()
을 호출합니다. 두 데이터베이스 모두에 대해 하나의 Session
이있는 것이 좋지만, 그렇지 않은 경우 각 Session
에 .remove()
을 호출하여 BaseController
을 수정해야 할 수도 있습니다.
거의 모든 다른 디자인이 이보다 낫습니다. 여러 소스에서 단일 데이터베이스를로드 할 수없는 이유는 무엇입니까? –
또는 현재 데이터베이스에 외부 데이터베이스를 연결하십시오. 그 (것)들은 동일한 연결에서, 다만 다른 이름 공간에서 인처럼 행동하게합니다. – Christopher
모든 것을 하나의 데이터베이스에로드하려면 스키마를 수정해야하며, 다른 응용 프로그램이 해당 스키마에 의존하기 때문에이를 수행 할 수 없습니다. ATTACH 제안은 흥미로운 것으로 들리지만 내 경우에는 작동하도록 만드는 방법을 생각할 수 없습니다. 내 모델을 선언적으로 구축하기 위해 sqlalchemy를 사용하고 있으며 각 모델 클래스는 tablename과 연결되어 있습니다. 동일한 데이터베이스를 연결하려면 각 tablename 앞에 sqlalchemy를 구분하는 식별자를 추가해야합니다. – dzhelil