2009-10-19 14 views
5

Czy jest konieczne, aby dwa modele SQLAlchemy dziedziczyły po tym samym wystąpieniu declarative_base(), jeśli muszą uczestniczyć w tej samej sesji? Jest tak prawdopodobnie w przypadku importowania dwóch lub więcej modułów definiujących modele SQLAlchemy.Czy dwa deklaratywne modele SQLAlchemy mają tę samą deklaratywną bazę danych()?

from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class SomeClass(Base): 
    __tablename__ = 'some_table' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50)) 

Base2 = declarative_base() 

class AnotherClass(Base2): 
    __tablename__ = 'another_table' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(50)) 

Odpowiedz

4

Z powodzeniem używam różnych podstaw deklaratywnych w pojedynczej sesji. Może to być przydatne w przypadku korzystania z kilku baz danych: każda baza jest tworzona z wykorzystaniem własnych metadanych, a każda metadata jest powiązana z oddzielną bazą danych. Niektóre z deklaratywnych baz mogą definiować dodatkowe metody lub mogą używać innej metaklasy do instalowania rozszerzeń.

+0

Można również użyć pojedynczej sesji z argumentem binds = {Class: database, ...}. – joeforker

+0

Pewnie. Ale taki wiążący się słownik jest trudny do utrzymania, gdy staje się ogromny. Chociaż mówię o konstruowaniu go automatycznie z kilku obiektów metadanych. –

2

Oddzielne klasy podstawowe będą działały dobrze.

Musisz być ostrożny, gdy używasz różnych połączeń z bazą danych, w takim przypadku nie możesz korzystać z połączeń w obu bazach danych - każde zapytanie musi przejść do jednej bazy danych.

Powiązane problemy