Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda