Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

87
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!