如何将查询结果映射到 sqlalchemy 中的自定义对象?

2023-11-22

我正在寻找一种方法来告诉 sqlalchemy 将某些 tabes 上的复杂查询映射到自定义类MyResult而不是默认的RowProxy班级。这是一个简单的工作示例

'''
create table foo(id integer, title text);
create table bar(id integer, foo_id integer, name text);
insert into foo values(0, 'null');
insert into foo values(1, 'eins');
insert into bar values(0,0, 'nullnull');
insert into bar values(1,0, 'einsnull');
insert into bar values(2,1, 'zweieins');
'''

和以下代码:

from sqlalchemy import *
from itertools import imap

db = create_engine('sqlite:///test.db')
metadata = MetaData(db)

class MyResult(object):
    def __init__(self, id, title, name):
        self.id = id
        self.title = title
        self.name = name

foo = Table('foo', metadata, autoload=True)
bar = Table('bar', metadata, autoload=True)

result = select([foo.c.id, foo.c.title, bar.c.name], foo.c.id == bar.c.foo_id).execute().fetchall()

现在我正在寻找一种方法来告诉 sqlalchemy 执行从结果行到 MyResult 的映射。

row = result[0]
print type(row)
#<class 'sqlalchemy.engine.base.RowProxy'>
print row.items()
#[(u'id', 0), (u'title', u'null'), (u'name', u'einsnull')]

我知道我可以用类似的东西手动进行映射

my_result = imap(lambda x: MyResult(**x), result)

但我感觉这不是 sqlalchemy 中处理它的方法。


从您的示例中可以看出,将返回超过 1 个 FooFoo.id = 0,这将导致主键出现重复值,而这又只会导致返回结果集的子集。在这种情况下,您可能应该延长primary_key也给其他人Bar列(包括Bar.id or use Bar.name如果它是唯一的)。

然后您可以使用from_statement(如记录在使用文字 SQL) 为了达成这个:

sql_qry = select([foo.c.id.label("id"), 
                  foo.c.title.label("title"), 
                  bar.c.name.label("name")], 
                 foo.c.id == bar.c.foo_id)
my_result_qry = session.query(MyResult).from_statement(sql_qry)
for x in my_result_qry.all():
    print x

然而,该模型MyResult必须进行映射。您可以将其映射到某个虚拟(不存在)表或视图。还有label列的 s 很重要,因为它们必须与类的列定义完全匹配(构造函数将not无论如何都可以使用)。

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

如何将查询结果映射到 sqlalchemy 中的自定义对象? 的相关文章

随机推荐

  • 将文本附加到 RichTextBox 的最快方法?

    我有一个带有 RichTextBox 控件的应用程序 其中的过程几乎总是添加文本 RichTextBox1 Text vbNewLine Title AlbumName RichTextBox1 Text vbNewLine Genre A
  • 序数编码或 One-Hot 编码

    如果我们不确定分类特征的性质 例如它们是名义特征还是序数特征 我们应该使用哪种编码 序数编码还是单热编码 关于这个主题有明确的规则吗 我看到很多人在没有方向的分类数据上使用序数编码 假设有一个频数表 some data some col v
  • Swift 中开关盒的详尽条件

    苹果文档 says 每个 switch 语句都必须是详尽的 也就是说 每一个可能的 正在考虑的类型的值必须与其中之一匹配 切换案例 所以在新的 Xcode 中我放置了这样的代码 println UInt16 min Output 0 pri
  • C# 通过 T 的成员对列表 进行二进制搜索

    我有一个基类Event with a DateTime member TimeStamp 许多其他事件类将从中派生 我希望能够快速搜索事件列表 因此我想使用二分搜索 列表数据按时间戳排序 但同时发生的事件可能存在重复的时间戳 所以我开始写这
  • Node.js MySQL 模块 - 抛出错误; // 重新抛出非 MySQL 错误;

    今天我尝试了来自 w3schools 的 node js mysql 片段 var mysql require mysql var con mysql createConnection host localhost user roots W
  • 如何在 Coq 中使用归纳类型来处理案例

    我想使用destruct通过案例来证明陈述的策略 我在网上读了几个例子 但我很困惑 有人可以更好地解释一下吗 这是一个小例子 还有其他方法可以解决它 但尝试使用destruct Inductive three zero one two Le
  • Visual Studio C++ 是否可以在不链接的情况下编译对象

    我正在运行 VS 2010 SP1 并且有一个每周运行一次的特殊分析配置 因为构建服务器需要很长时间来分析所有内容 我希望此配置无需链接即可运行 如果分析通过了项目中的所有代码 那么我希望构建继续进行下一个项目而不链接 我看不出有什么方法可
  • Python套接字接受块-防止应用程序退出

    我编写了一个非常简单的 python 类 它等待套接字上的连接 目的是将此类粘贴到现有应用程序中 并将数据异步发送到连接的客户端 问题是 当等待 socket accept 时 我无法通过按 ctrl c 来结束我的应用程序 我也无法检测到
  • JDBC 到 Spark Dataframe - 如何确保均匀分区?

    我是 Spark 新手 正在致力于通过 JDBC 从 Postgres 数据库表创建 DataFrame 使用spark read jdbc 我对分区选项有点困惑 特别是分区列 下界 上限 and 分区数 文档似乎表明这些字段是可选的 如果
  • JSON - Spring MVC:如何将 json 数据发布到 spring MVC 控制器

    我在发布 JSON 数据时遇到问题jsp to controller 每次我尝试都会收到 ajax 错误Bad Request 我对 JSON 很陌生 我真的不知道我做错了什么 我搜索并尝试了一些可以在该网站中找到的示例 但仍然遇到问题 在
  • 使用 JAX-WS:如何设置用户代理属性

    我对此进行了搜索并发现了一些未遂事件 我创建了一个 java 客户端来使用 JAX WS 来使用 Web 服务 使用 JAX 时有没有办法设置 HTTP USER AGENT 值 我希望在特定客户端 我的 访问它时获得我的网络服务日志 因此
  • 检测何时连接新显示器

    我正在编写一个需要两个显示器的应用程序 一个用于控制面板 另一个用于输出 我所拥有的是这样的 如果只有一个显示器 应用程序会在其上显示两种表单 但如果有两个显示器 则输出表单将转到另一个 问题是这只在应用程序启动时才会发生 换句话说 如果应
  • 在jsf中使用json将数据从bean发送到javascript

    我想将我的数组列表从 ManagedBean 发送到 JavaScript 代码 我的豆子在这里 public void getDataAsJson String dizi Tokyo Jakarta New York Seoul Mani
  • 如何计算列的平均值,然后将其包含在oracle中的选择查询中?

    我的桌子是 create table mobile id integer m name varchar 20 cost integer 其值为 insert into mobile values 10 NOkia 100 insert in
  • jqplot - 单个值,而不是堆积图中的总计

    In a stacked bar chart we can show total of each series in every stack like this However I want value of each series to
  • Identity.EntityFramework OnModelCreating 是如何调用的

    我正在从事两个类似的项目 但我没有创建其中任何一个 它们都具有相同的本地上下文 如下所示 using Microsoft AspNet Identity EntityFramework public class LocalContext I
  • 如何将uuid存储为数字?

    根据问题的回答 MySQL 中的 UUID 性能 回答者建议将 UUID 存储为数字而不是字符串 我不太确定如何做到这一点 有人可以建议我一些东西吗 我的 ruby 代码如何处理这个问题 如果我理解正确的话 您在主列中使用 UUID 吗 人
  • 如何将 QBASIC PLAY 命令转换为更现代的命令?

    我的 QB 应用程序中有这样的播放命令 PLAY MSe8f 4f 8f 8g8a8b4 a4 g4 f 4 o0b8o1e8e8e4d8e2 我想以某种方式将它们转换为现代应用程序可以使用的东西 有什么想法吗 我目前正在 FreeBasi
  • min_member/2 的反直觉行为

    最小成员 分钟 列表 当 Min 是标准项顺序中最小的成员时为真 如果列表为空 则失败 min member 3 1 2 X X 3 当然 解释是变量在术语的标准顺序中位于所有其他术语之前 并且使用统一 然而 所报告的解决方案感觉有些错误
  • 如何将查询结果映射到 sqlalchemy 中的自定义对象?

    我正在寻找一种方法来告诉 sqlalchemy 将某些 tabes 上的复杂查询映射到自定义类MyResult而不是默认的RowProxy班级 这是一个简单的工作示例 create table foo id integer title te