Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
Cómo configurar schema_translate_map en el objeto SQLAlchemy en la aplicación Flask

Mi archivo app.py

 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres:////tmp/test.db' db = SQLAlchemy(app) # refer https://flask-sqlalchemy.palletsprojects.com/en/2.x/api/#flask_sqlalchemy.SQLAlchemy

Una de mis clases modelo, donde importé db

 from app import db Base = declarative_base() # User class class User(db.Model, Base): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return '<User %r>' % self.username def get_user_by_id(self, id): return self.query.get(id)

Mi base de datos tiene el mismo conjunto de tablas en diferentes esquemas (multiinquilino) y allí necesito seleccionar el esquema según la solicitud iniciada por un inquilino en particular sobre la marcha usando before_request (tomando el id_inquilino de la URL del subdominio).

Encontré que Postgres proporciona seleccionar el nombre del esquema al vuelo usando schema_translate_map ref. https://docs.sqlalchemy.org/en/14/core/connections.html#translation-of-schema-names y que se encuentra en las opciones de execution_options https://docs.sqlalchemy.org/en/14/core/connections. html#sqlalchemy.engine.Connection.execution_options

En mi fragmento de código anterior donde ve db = SQLAlchemy(app) , según la documentación oficial, se pueden establecer dos parámetros en la creación de objetos de SQLAlchemy y son: session_options y engine_options , pero no execution_options ref. https://flask-sqlalchemy.palletsprojects.com/en/2.x/api/#flask_sqlalchemy.SQLAlchemy

Pero, ¿cómo configuro la configuración schema_translate_map cuando estoy creando un objeto de SQLAlchemy

Intenté esto -

 db = SQLAlchemy(app, session_options={ "autocommit": True, "autoflush": False, "schema_translate_map": { None: "public" } } )

Pero, obviamente, no funcionó, porque schema_translate_map está bajo las opciones de execution_options como se menciona aquí https://docs.sqlalchemy.org/en/14/core/connections.html#translation-of-schema-names

Alguien tiene una idea, cómo configurar schema_translate_map al momento de crear el objeto SQLAlchemy .

Mi objetivo es configurarlo dinámicamente para cada solicitud. Quiero controlarlo desde este lugar centralizado, en lugar de ir a cada archivo de modelo y especificarlo cuando ejecuto consultas.

Soy consciente de hacer esto de manera diferente como se sugiere aquí https://stackoverflow.com/a/56490246/1560470 pero mi necesidad es configurar en algún lugar alrededor de db = SQLAlchemy(app) solo en el archivo app.py Luego, después de importar db en todas mis clases de modelo (como se muestra arriba) y en esas clases de modelo, todas las consultas se ejecutan bajo el esquema seleccionado.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Encontré una manera de lograrlo. esto es lo que necesitaba

 db = SQLAlchemy(app, session_options={ "autocommit": True, "autoflush": False }, engine_options={ "execution_options": { "schema_translate_map": { None: "public", "abc": "xyz" } } } )
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda