Mysql
 sql >> Database >  >> RDS >> Mysql

Quando mi connetto a più database, ho bisogno di più oggetti SQLAlchemy Metadata, Base o Session?

La risposta breve è che è più semplice avere istanze separate di tutte per entrambi i database. È possibile creare un singolo routing sessione , ma ha i suoi avvertimenti.

Il sessionmaker e Session supporta anche il passaggio di più lega come argomento e commit a 2 fasi , che può consentire anche l'utilizzo di una singola sessione con più database. Per fortuna, i 2 database che supportano i commit in 2 fasi sono PostgreSQL e MySQL.

Sulla relazione tra Base e metadata :

Base è una classe base che ha una metaclasse usata per creare dichiarativamente Table oggetti dalle informazioni fornite nella classe stessa e nelle sue sottoclassi. Tutti Table oggetti dichiarati implicitamente dalle sottoclassi di Base condividerà gli stessi MetaData .

Puoi fornire metadati come argomento durante la creazione di una nuova base dichiarativa e quindi condividerla tra più Base s, ma nel tuo caso non è utile.

MetaData è una raccolta di Table oggetti e i loro costrutti di schemi associati. Può anche contenere un collegamento a un Engine o Session .

In breve, puoi avere Table se MetaData senza una Base , ma una Base richiede MetaData per funzionare.