Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Benötige ich beim Herstellen einer Verbindung zu mehreren Datenbanken mehrere SQLAlchemy-Metadaten-, -Basis- oder -Sitzungsobjekte?

Die kurze Antwort ist, dass es am einfachsten ist, separate Instanzen von allen für beide Datenbanken zu haben. Es ist möglich, ein einzelnes Routing zu erstellen Sitzung , aber es hat seine Vorbehalte.

Der sessionmaker und Session unterstützt auch Mehrfachübergabe bindet als Argument und 2-Phasen-Commits , die auch die Verwendung einer einzelnen Sitzung mit mehreren Datenbanken ermöglichen kann. Glücklicherweise sind PostgreSQL und MySQL die beiden Datenbanken, die 2-Phasen-Commits unterstützen.

Über die Beziehung zwischen Base und metadata :

Base ist eine Basisklasse mit einer Metaklasse, die zum deklarativen Erstellen von Table verwendet wird Objekte aus Informationen, die in der Klasse selbst und ihren Unterklassen bereitgestellt werden. Alle Table Objekte, die implizit von Unterklassen von Base deklariert werden werden die gleichen MetaData teilen .

Sie können Metadaten bereitstellen als Argument beim Erstellen einer neuen deklarativen Basis verwenden und sie somit zwischen mehreren Base teilen s, aber in Ihrem Fall ist es nicht sinnvoll.

metadata ist eine Sammlung von Table Objekte und ihre zugeordneten Schemakonstrukte. Es kann auch eine Bindung zu einer Engine halten oder Session .

Kurz gesagt, Sie können Table haben s und MetaData ohne Base , sondern eine Base erfordert MetaData zu funktionieren.