每个视图更改数据库和每个视图访问多个数据库

2023-12-28

我在 Pyramid 中使用 SQLAlchemy 时遇到一些问题。虽然我可以找到我需要的示例,但它们通常都很短且缺乏。所以我最终得到了几乎没有任何意义的零碎代码。所以我希望有人能够给出我需要做什么的更完整的例子。

我有 4 个数据库,全部具有相同的架构。我希望能够从一个 Pyramid 应用程序中处理它们,有时列出所有 4 个数据库中的所有“订单”,有时只列出“site1”中的所有“订单”。由于架构相同,我也对数据库使用相同的模型类。

我已经尝试过使用 sqlahelper 和普通的 SQLAlchemy,但没有成功。下面的代码使用 sqlahelper 但我很乐意使用任何有效的东西:

__init__.py

site1_eng = engine_from_config(settings, prefix='site1.')
site2_eng = engine_from_config(settings, prefix='site2.')
site3_eng = engine_from_config(settings, prefix='site3.')

sqlahelper.add_engine(site1_eng, 'site1_eng')
sqlahelper.add_engine(site2_eng, 'site2_eng')

views.py

def site_orders(request):
    site = request.matchdict['site']
    db_eng = sqlahelper.get_engine(("%s_eng" % (site)))
    conn = db_eng.connect()
    dbsession = sqlahelper.get_session()
    dbsession.configure(bind=conn)

    orders = dbsession.query(Order).order_by(Order.cdate.desc())[:100]

    return dict(orders=orders, pagetitle=(site+" Orders"))

会发生什么?

好吧,我希望它能根据 URL 切换数据库,而且确实如此!然而,选择哪一个似乎完全是随机的。因此 /orders/site1/ 有时会转到 site2 数据库,有时会转到 site3。刷新常常会切换每次选择的数据库。其他 URL 也一样。

就好像会话没有绑定到数据库,并且它选择当时恰好在会话中的那个?这可能没有意义 - 我对 SQLAlchemy 的理解不是很好。

真的希望有人能够提供帮助,因为这一切都取决于在视图中快速轻松地切换数据库的能力,而目前似乎完全不可能控制它。

笔记: 我最初尝试遵循并更改 Pyramid SQLA+URL Dispatcher 教程,该教程使用了:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

但我在找到sqlahelper时删除了它。如果我应该使用它,请告诉我。


对我来说,为每个请求进行配置和连接似乎是一项繁重的工作。我将在模型模块中创建四个会话处理程序,然后从它们中进行选择。

Example:

models/__init__.py

DBSession1 = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))  
DBSession2 = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))  
DBSession3 = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))  
DBSession4 = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))  
metadata1 = MetaData()                                                           
metadata2 = MetaData()                                                           
metadata3 = MetaData()                                                           
metadata4 = MetaData()                                                           

def initialize_sql(engines, drop_db=False):                                      
    DBSession1.configure(bind=engine[0])
    DBSession2.configure(bind=engine[1])                                            
    DBSession3.configure(bind=engine[2])                                            
    DBSession4.configure(bind=engine[3])                                            
    metadata1.bind = engine[0]                                            
    metadata2.bind = engine[1]                                            
    metadata3.bind = engine[2]                                            
    metadata4.bind = engine[3]  

然后在你看来:

from mypackage.models import DBSession1, DBSession2, DBSession3, DBSession4

def site_orders(request)                                                      
    site = request.matchdict['site']                                                      
    dbsession = globals().get("DBSession%d" % site)                                                      
    orders = dbsession.query(Order).order_by(Order.cdate.desc())[:100]                                                      
    return dict(orders=orders, pagetitle=(site+" Orders"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个视图更改数据库和每个视图访问多个数据库 的相关文章

  • Pytorch - 推断线性层 in_features

    我正在构建一个玩具模型来获取一些图像并进行分类 我的模型看起来像 conv2d gt pool gt conv2d gt linear gt linear 我的问题是 当我们创建模型时 我们必须计算第一个线性层的大小in features基
  • 在 Python 中同时插入行

    我正在尝试对我的代码进行矢量化 但遇到了障碍 我有 nxd x 值数组 x1 xn 其中每一行 x1 有很多点 x11 x1d nxd y 值数组 y1 y2 y3 其中每一行 y1 有很多点 y11 y1d x 值的 nx1 数组 x 1
  • 如何将人物传奇带到前台?

    我有一系列子图 其中每个子图都有一个图例 我想在每个子图之外与相邻子图重叠 问题在于图例位于其自己的图的 顶部 但位于相邻图的下方 Legend 不将 zorder 作为参数 所以我不知道如何解决这个问题 这是我使用过的代码 import
  • Json.dump 失败并显示“必须是 unicode,而不是 str”TypeError

    我有一个 json 文件 其中恰好有大量中文和日文 以及其他语言 字符 我将其加载到我的 python 2 7 脚本中使用io open如下 with io open multiIdName json encoding utf 8 as j
  • Python,将字典存储在数据库中

    在数据库中存储和检索 python 字典的最佳方法是什么 如果您对使用传统 SQL 数据库 例如 MySQL 不是特别感兴趣 您可以研究非结构化文档数据库 其中文档自然映射到 python 字典 例如MongoDB http www mon
  • 如何从 Python 3.5 降级到 3.4

    我想安装 kivy 链接在这里 https kivy org docs installation installation windows html install win dist 用于项目 但是 当尝试使用 pip 安装它所依赖的包时
  • 如何使直方图列的宽度都相同

    我在操作直方图时遇到了一些麻烦 我有一个包含两列的 df 我将它们绘制为堆叠直方图 我将它们放入特定的垃圾箱中 请参阅下面的代码 但我想在最后制作一个大垃圾箱 4000 10000 但是 默认情况下 大垃圾箱的列宽很大 有没有办法让这个大垃
  • 进行异步调用时,“yield”在龙卷风中如何工作?

    最近我在学习龙卷风简介 我遇到了以下代码 class IndexHandler tornado web RequestHandler tornado web asynchronous tornado gen engine def get s
  • 使用 matplotlib 设置或固定二元分布值

    I ve animated a bivariate gaussian distribution using matplotlib 我已经计算过这个distribution通过调整COV matrix来考虑特定的变量 我可以提供有关此过程的更
  • 收到“/:未找到事件。”使用 PyCharm 远程调试器时

    当我使用 PyCharm 通过 ssh 进行远程调试时tcsh shell 服务器 很多时候它停止工作 并显示 未找到事件 更具体地说 我在 pycharm 调试控制台中遇到以下内容 ssh username hostserver 22 p
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 如何在 matplotlib 中第一个 x 轴的底部添加第二个 x 轴?

    我指的是已经提出的问题here https stackoverflow com questions 10514315 how to add a second x axis in matplotlib 在此示例中 用户通过将第二个轴添加到与标
  • 返回吃异常

    我至少发现了以下行为weird def errors try ErrorErrorError finally return 10 print errors prints 10 It should raise NameError name E
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • Python 包安装:pip 与 yum,还是两者一起安装?

    我刚刚开始管理 Hadoop 集群 我们使用 Bright Cluster Manager 直至操作系统级别 CentOS 7 1 然后使用 Ambari 以及适用于 Hadoop 的 Hortonworks HDP 2 3 我不断收到安装
  • 如何从 IDLE 命令行运行 Python 脚本?

    在 bash shell 中 我可以使用 bash 或 source 手动调用脚本 我可以在 Python IDLE 的交互式 shell 中做类似的事情吗 我知道我可以转到文件 gt gt 打开模块 然后在单独的窗口中运行它 但这很麻烦
  • Pandas:按日历周分组,然后绘制真实日期时间的分组条形图

    EDIT 我找到了一个非常好的解决方案并将其发布在下面作为答案 结果将如下所示 您可以为此问题生成一些示例数据 codes list ABCDEFGH dates pd Series pd date range 2013 11 01 201
  • 设置字符串中单词或字符数的限制

    假设我有一个字符串元素列表 wordlist hi what s up home diddle mc doo Oh wise master kakarot hello have a da 我希望列表中的每个元素最多包含 3 个单词或 20
  • 重新安装后使用 pandas dataframes 时出现问题

    我已经重新安装了 Python 和 Anaconda 现在面临以下问题 在我将 pkl 文件加载到数据帧并尝试 查看 该文件后 如下所示 df pd read pickle example pkl df 我收到错误 AttributeErr

随机推荐

  • 触发自定义类事件后,表单未更新

    我遇到一个问题 即使我看到事件触发 我的主表单也没有更新 让我解释一下情况并分享一些我的代码 因为我是业余爱好者 所以我确信这些代码会很糟糕 我创建了一个类来获取在后台运行进程的设置 我在该类中添加了一些自定义事件 以便我可以在表单中使用它
  • C# 泛型无法识别类型

    我不明白为什么下面的代码返回一个Cannot resolve method Write T 这对我来说似乎很明确 private static void WriteToDisk
  • 如何将您的代码上传到 Google Glass?

    我正在学习android和GDK 我安装了 Android开发者工具 和 SDK管理器 我制作了第一个 hello world 应用程序 但我不知道如何从 Windows 7 PC 连接到我的 Google Glass 来上传代码 如果有人
  • 如何释放记录中的对象?

    我想我遇到了一个棘手的情况 我需要能够释放一个记录字段的对象 如果它是一个类 我通常会在析构函数中编写清理代码 但是由于记录类型不能引入 析构函数 那么如何调用TObject 字段 Free 我预测会有两种类型的使用 用新记录替换记录 我认
  • 并发调用缓存方法

    我正在使用带有 Guava 缓存的 Spring 缓存抽象 我有一个带有 Cacheable 注释和参数 用作缓存键 的方法 用于将值放入缓存中 但该方法是在多线程环境中访问的 因此存在多个并发调用具有相同参数值的方法 因此 这意味着创建要
  • JavaScript 音频循环

    我想在后台播放音频 3 次 3 次后音频将自动停止 我已经尝试过这段代码 但它不起作用 HTML 代码
  • 在 XAML 中设置 TextBlock 的最大字符长度

    如何设置允许用户在 xaml 的 TextBlock 中输入的字符数 我会在模型上执行此操作还是创建某种自定义属性来处理它 TextBlock 没有 MaxLength Label 也没有 文本框可以 除非您对其进行了修改 否则用户无法向
  • 如何通过本地网络在 C# 桌面应用程序和移动(android)设备之间进行通信? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 C net 3 5 桌面应用程序 可以在屏幕上打印一些数字 现在我想将其扩展到移动设备 在我的例子中是 Android 设备
  • 全局变量的快速去初始化

    我的 Swift 全局变量没有被取消初始化 class Person let name String init name String self name name println name is being initialized dei
  • 如何使用 Factory 将自定义参数传递给 ViewModel?

    我知道为了将自定义参数传递给视图模型 我们可以用ViewModelProvider NewInstanceFactory 像这样 Factory Class class MyFactory extends ViewModelProvider
  • WebApi 是否支持 application/x-www-form-urlencoded 开箱即用

    您好 我正在尝试设置一个 api 以允许第 3 方 webhook 成为发布 application x www form urlencoded 的目的地 我只使用过 webapi 处理过 json 和 xml 我是否需要创建一个自定义媒体
  • Rails/Rspec:测试delayed_job邮件

    只是想知道如何测试actionmailer请求实际上发送到rspec中的delayed job que 我本以为这很简单 但我的elaided job队列似乎并没有增加 代码如下 控制器 def create contact Contact
  • 如何隐藏图像,直到 jquery flexslider 完成加载后

    我尝试将 wootheme 的 Flexslider 集成到我的网站上 除了加载时之外 它看起来 工作得很好 当您使用滑块刷新页面时 在 flexslider 加载之前 大约 1 秒 第一张幻灯片会显得非常大并闪烁为黑色 然后消失 然后出现
  • 行尾转换如何在不同操作系统之间使用 git core.autocrlf

    我在 Stack Overflow 上阅读了很多不同的问题和答案git有关如何的文档核心 autocrlf设置作品 这是我从所读到的内容中得到的理解 Unix 和 Mac OSX OSX 之前的版本使用 CR 客户端使用 LF 行结尾 Wi
  • 如何将多个域指向一台服务器?

    我有一个几乎没有使用过的 VPS 我很乐意将我拥有的几个域 通过其他地方的注册商 指向此 VPS 的不同文件夹 有什么办法可以做到这一点吗 For example helloomgwtf com gt 111 111 111 111 hel
  • 替换 R 中缺失值的均值或众数

    我有一个由混合数据类型 数字 字符 因子 序数因子 缺少值 而我是 尝试创建一个 for 循环来替换缺失的值 如果是数字 则使用相应列的平均值 如果是字符 因子 则使用众数 这是我到目前为止所拥有的 fake array age lt c
  • 何时不使用 docker run --init

    The init flag https docs docker com engine reference run specify an init process of docker run导致tini初始化系统用作ENTRYPOINT 因此
  • 詹金斯。指定的代理类型“docker”无效。必须是 [任意、标签、无] 之一

    我的 JenkinsFile 如下所示 pipeline agent docker image node 12 16 2 args p 3000 3000 stages stage Build steps sh node version s
  • Delphi函数通用

    我想创建一个通用函数 我是通用的新手 我有 3 个不同类型的私人列表 我想要一个公共通用方法来返回列表中的 1 项 我有下面的代码 我已经简化了 TFilter class private FListFilter TObjectList
  • 每个视图更改数据库和每个视图访问多个数据库

    我在 Pyramid 中使用 SQLAlchemy 时遇到一些问题 虽然我可以找到我需要的示例 但它们通常都很短且缺乏 所以我最终得到了几乎没有任何意义的零碎代码 所以我希望有人能够给出我需要做什么的更完整的例子 我有 4 个数据库 全部具