为什么 schema_translate_map 不更改架构?

2024-04-14

我正在尝试使用schema_translate_map更改架构:

Base = declarative_base()


class DataAccessLayer():

    def __init__(self):
        conn_string = "mysql+mysqlconnector://root:root@localhost/"
        self.engine = create_engine(conn_string)
        Session = sessionmaker()
        Session.configure(bind=self.engine)
        self.session = Session()

    def change_schema(self):
        self.session.connection(execution_options={"schema_translate_map": {"belgarath": "belgarath_test"}})


class Player(Base):
    __tablename__ = "player"
    __table_args__ = {'schema': "belgarath"}

    id_ = Column(Integer, primary_key=True)


dal = DataAccessLayer()
dal.change_schema()
qry = dal.session.query(Player.id_)
print(qry)

然而,SQL 的结果是:

SELECT belgarath.player.id_ AS belgarath_player_id_ 
FROM belgarath.player

代替:

SELECT belgarath_test.player.id_ AS belgarath_test_player_id_ 
FROM belgarath_test.player

我哪里错了?


尝试一下如果你简单地附加会发生什么.all()给你的qry:

from sqlalchemy import Integer
from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class DataAccessLayer():

    def __init__(self):
        conn_string = "sqlite:///:memory:"
        #conn_string = "mysql+mysqlconnector://root:root@localhost/"
        self.engine = create_engine(conn_string)
        Session = sessionmaker()
        Session.configure(bind=self.engine)
        self.session = Session()

    def change_schema(self):
        self.session.connection(execution_options={"schema_translate_map": {"belgarath": "belgarath_test"}})


class Player(Base):
    __tablename__ = "player"
    __table_args__ = {'schema': "belgarath"}

    id_ = Column(Integer, primary_key=True)


dal = DataAccessLayer()
dal.change_schema()
qry = dal.session.query(Player.id_)
print(qry.all())

输出(无痕迹):

OperationalError: (sqlite3.OperationalError) no such table: belgarath_test.player
[SQL: SELECT belgarath_test.player.id_ AS belgarath_player_id_ 
FROM belgarath_test.player]
(Background on this error at: http://sqlalche.me/e/13/e3q8)

我不是专家,但我想这可能与以下内容有关issue https://github.com/sqlalchemy/sqlalchemy/issues/5004:

模式转换功能发生在编译器内,这显然是错误的。模式分配应该在 SQL 生成之后进行,这样我们只需要一个缓存键。这与 #5002 的思路一致,但我认为即使是与烘焙等一起使用的现有缓存密钥机制也需要将架构翻译完全从编译器中提取出来以用于 1.4,并将其添加到从 ExecutionContext 发生的翻译中,以及扩展逻辑参数集。模式转换旨在为数百/数千个模式提供服务,因此必须更改预缓存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 schema_translate_map 不更改架构? 的相关文章

随机推荐

  • 为什么我的 ViewController 重新打开后不显示另一个 SKScene?

    所以现在我正在编写一个游戏 但遇到了一个我没有真正找到解决方案的问题 我会尽力为你描述它 所以 为了能够更好地解释我的问题 我为你们创建了一个示意图 现在问题是 我有两个视图控制器 一个称为MenuVc 另一个称为GameVC In Gam
  • ant命令不生成apk文件

    我正在使用 Ant 构建我的应用程序 我的应用程序使用库项目 所以首先我在命令行中运行以下命令以在我的项目中生成 build xml 安卓更新 项目 target 5 p 我的项目路径 l 我的库项目路径 我的应用程序的构建目标是 4 0
  • 将常见的剃刀助手移至另一个文件

    我有一个 MVC4 Web 应用程序 目前有一些 helper是我在多个页面上使用的 在 cshtml 中定义 问题是 我必须在使用它们的每个页面上定义它们 是否有可能创建一个 cshtml包含我所有的文件 helper并将该页面包含到我的
  • 如何永久添加Python导入路径?

    我知道我可以像这样添加 Python 的导入路径 import sys sys path append path to directory 但是 当我重新启动 Python 时 这个问题就消失了 如果我必须一直这样做 我会觉得很烦人 我想一
  • 使用 Jenkins xUnit 插件显示 QTestlib 的结果

    我正在尝试将 Jenkins xUnit 插件用于我的 Qt 单元测试项目 但我无法使其工作 这是我到目前为止所做的 首先 我使用 qmakebuilder 插件构建我的单元测试项目 向 qmakebuilder 插件提供 pro 然后添加
  • 如何使用 Selenium 获取网站的图标

    我需要获取网站的图标 我怎样才能做到这一点 您将无法使用 Selenium 获取网站图标 您必须使用另一个程序来获取它 您获得它的唯一方法是您的网站将 favicon ico 呈现为链接 例如 然而 通常网站只是将 favicon ico
  • OpenDDS - 从单个 IDL 结构创建多个主题

    在我的练习中OpenDDS我想从单个 IDL 结构创建多个主题 这可能吗 否则请让我知道该怎么做 我是按照下面的方法做的 如果不对请指正 我使用的示例可在OpenDDS 3 12 examples DCPS IntroductionToOp
  • 这里 return true 或 false 有什么区别?

    form submit function alert this serialize return false return true 这个表单提交函数和return有什么区别false and true 如果你回来false从提交事件来看
  • 如何在 playbook 中使用 Ansible Tower 登录凭据?

    是否可以使用我用来直接在剧本中登录 Ansible Tower 的凭据 是的 您可以通过使用 保存您的凭据 来完成此操作安西布尔塔 Ansible Tower 上的凭证类型 从 Ansible Tower UI 中 转至 Credentia
  • Perl 脚本中的大小写敏感性 - 如何使其不敏感?

    我如何更改以下马尔可夫脚本以将大写和小写单词视为相同 整个想法是帮助提高马尔可夫文本生成器的输出质量 就目前情况而言 如果您在其中插入 99 个小写句子和 1 个大写句子 您几乎总是会在输出中找到大写句子的非标记化版本 Copyright
  • 解析期间强大的库存

    当我开始使用我的应用程序上传文件时 它会在第一步后存储 上传功能代码如下 exports upload function req res var form formidable IncomingForm console log Upload
  • 实体框架 4.0:错误 113:多重性在角色中无效

    我在数据库中放入了一个新表 并且有 4 个表与其有外键关系 我以为我以相同的方式配置了所有 4 个 但我收到此错误 错误 15 错误 113 多重性在关系 FK OtherLeaves ReportCellImages 中的角色 Repor
  • 如何在 JTSAGE 日期选择器中仅显示日期之前

    I use Jtsage http dev jtsage com jQM DateBox2 我的移动应用程序 jquery mobile 和phonegap 中的日期选择器 我只想显示今天和今天之前的日期 hide future dates
  • 如何逐像素绘制任意方向的椭圆?

    我必须逐像素绘制任意大小和方向的椭圆 绘制一个长轴和短轴与 x 轴和 y 轴对齐的椭圆似乎很容易 但将椭圆旋转任意角度似乎更棘手 最初 我认为绘制未旋转的椭圆并对每个点应用旋转矩阵可能会起作用 但似乎这可能会导致舍入错误 而且我需要相当高的
  • C 中函数指针的初始化

    我有这个功能 uint8 t Authorization getRole char const userId UsertoRole T const roleTable 在主程序中我有 given Role Authorization get
  • 如何在另一个类中访问一个类的成员函数?

    我无法访问另一个类中一个类的成员函数 尽管我可以在 main 中很好地访问它 我一直在尝试扭转局面 但无法理解我做错了什么 任何帮助 将不胜感激 这是生成错误的行 cout lt lt n nRetrieve key from inside
  • Github 存储库 - LockFile 存在

    我最近尝试通过 GitHub Desktop 提交到我的存储库 并被告知有一个锁定文件阻止我这样做 我不记得上传过这个锁定文件 也不知道它来自哪里 可能有其他人同时推动吗 否则 只需尝试存储更改 移动到另一个分支 返回 应用存储并再次推送
  • Unity / RIDER:乘法运算的顺序效率低下?

    骑手 IDE 告诉我以下操作效率低下 transform Translate moveDirection speed Time smoothDeltaTime 并想将其重写为 transform Translate Time smoothD
  • 在javascript中获取元素的xpath

    我正在使用 javascript 进行开发 我需要获取单击的元素的 xpath 我知道为了获得 id 我们可以这样做 element onclick function event var target id event target id
  • 为什么 schema_translate_map 不更改架构?

    我正在尝试使用schema translate map更改架构 Base declarative base class DataAccessLayer def init self conn string mysql mysqlconnect