2012-09-10 8 views
10

Digamos que he creado un sistema de base de datos de productos para diferentes departamentos de mi empresa. Cada departamento tiene su propia instancia PostgreSQL-databse por varias razones. Los esquemas de las bases de datos son los mismos, sin embargo, los datos en ellos no lo son. Para cada uno de estos sistemas, existe una aplicación Python que hace alguna lógica de negocios (irrelevante). Cada aplicación de Python accede a ella y solo a sus bases de datos a través de SQLAlchemy.¿Cómo se usa SQLAlchemy para acceder sin problemas a múltiples bases de datos?

Quiero crear un Supervisior-System que pueda acceder a todos los datos en todas estas bases de datos (funcionalidad de lectura).

Aquí es un ejemplo de lo que pienso: enter image description here

¿Puedo hacer eso con SQLAlchemy? Si es así, ¿cuál es el mejor enfoque para ese tipo de problema?

Respuesta

10

Seguro que puedes hacer eso con SQLAlchemy.

Todo lo que necesita hacer es crear diferentes motores de conexión, cada uno con su propio generador de sesiones. Nada en SQLAlchemy lo limita a una sola base de datos a la vez.

engines = [] 
sessions = [] 
for dbconninfo in databases: 
    engine = create_engine(dbconninfo) 
    engines.append(engine) 
    sessions.append(sessionmaker(bind=engine)()) 

Se puede utilizar cada sesión para ejecutar consultas, objetos de resultado se unen a la sesión que los produjo, por lo que los cambios fluyen de nuevo a la base de datos correcta. Estudie el session documentation en detalle, para ver qué sucede si fusiona un objeto de una sesión a otra, por ejemplo.

+0

¿Y entonces puedo consultar todos los dbs a la vez? – AME

+1

@AME: siempre y cuando mantenga los resultados separados; no intente agregar resultados de una sesión a otra. –

Cuestiones relacionadas