我的apply.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

我的一个模型课,在那里我导入了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)

我的数据库在不同的模式(多租户)中有相同的表集,并且

我发现Postgres通过使用

在我上面的代码片段中,您可以看到db = SQLAlchemy(app),根据官方文档,在SQLAlchemy objct创建中可以设置两个参数,它们是-session_optionsengine_options,但没有execution_options参考文献https://flask-sqlalchemy.palletsprojects.com/en/2.x/api/#flask_sqlalchemy.SQLAlchemy

但是,当我创建一个SQLAlchemy的对象时,如何设置schema_translate_map

我试过了-

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

但很明显,它不起作用,因为schema_translate_map低于execution_options,正如这里提到的https://docs.sqlalchemy.org/en/14/core/connections.html#translation-of-schema-names

任何人都有一个 idea ,如何在创建SQLAlchemy对象时设置schema_translate_map.

我的目标是 for each 请求动态设置它.我想从这里控制它

我知道,按照这里的建议,我会采取不同的做法

推荐答案

我找到了实现它的方法.这就是我们需要的

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

Python相关问答推荐

如何使用Jinja语法在HTML中重定向期间传递变量?

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

Python 约束无法解决n皇后之谜

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

使可滚动框架在tkinter环境中看起来自然

如何记录脚本输出

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

如何合并两个列表,并获得每个索引值最高的列表名称?

使用Python查找、替换和调整PDF中的图像'

* 动态地 * 修饰Python中的递归函数

python sklearn ValueError:使用序列设置数组元素

以异步方式填充Pandas 数据帧

GPT python SDK引入了大量开销/错误超时

ModuleNotFoundError:Python中没有名为google的模块''

在第一次调用时使用不同行为的re. sub的最佳方式

高效生成累积式三角矩阵

Polars定制函数返回多列

用0填充没有覆盖范围的垃圾箱

遍历列表列表,然后创建数据帧

在不中断格式的情况下在文件的特定部分插入XML标签