sqlalchemy中查询相关表

2024-04-21

所以我有两个表“员工”和“详细信息”,如下所示。

class Employee(Base):
    __tablename__ = 'employees'
    id = Column(Integer, Sequence('employee_id_seq'), primary_key=True)
    name = Column(String(50), nullable=False)
    ............

class Detail(Base):
    __tablename__ = 'details'
    id = Column(Integer, Sequence('detail_id_seq'), primary_key=True)
    start_date = Column(String(50), nullable=False)
    email = Column(String(50))
    employee_id = Column(Integer, ForeignKey('employee.id'))
    employee = relationship("Employee", backref=backref('details', order_by=id))
    ............

现在我想做的是获取所有员工及其相应的详细信息,这是我尝试过的。

for e, d in session.query(Employee, Detail).filter(Employee.id = Detail.employee_id).all():
    print e.name, d.email

这样做的问题是它会将所有内容打印两次。我尝试使用 .join() 并打印结果两次。

我想要实现的目标是

print Employee.name
print Employee.details.email

如果您确实只关心几列,则可以直接在查询中指定它们:

q = session.query(Employee.name, Detail.email).filter(Employee.id == Detail.employee_id).all()
for e, d in q:
    print e, d

如果您确实想加载对象实例,那么我会采取不同的做法:

# query all employees
q = (session.query(Employee)
        # load Details in the same query
        .outerjoin(Employee.details)
        # let SA know that the relationship "Employee.details" is already loaded in this query so that when we access it, SA will not do another query in the database
        .options(contains_eager(Employee.details))
        ).all()

# navigate the results simply as defined in the relationship configuration
for e in q:
    print(e)
    for d in e.details:
        print(" ->", d)

至于你的duplicate结果问题,我相信你的真实代码中有一些“额外”的东西会产生这个错误......

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

sqlalchemy中查询相关表 的相关文章

随机推荐

  • 使用装饰器将类方法包装在 try / except 中

    我有一个通用函数 可以将有关异常的信息发送到应用程序日志 我用exception handler来自类中方法的函数 传入并由应用程序调用的应用程序日志处理程序exception handler创建一个 JSON 字符串 该字符串是实际发送到
  • 如何在 angularjs/bootstrap 中预填充对话框

    这个问题是关于使用 bootstrap css 和 javascript 的 angularjs 我有一个要显示和设置的项目列表 单击它们会打开一个对话框 允许您更改值 像这样的事情 ul li item text li ul div cl
  • 线程“main”中出现异常java.lang.UnsupportedClassVersionError,不支持的major.minor版本52.0

    我尝试在 hadoop 1 0 4 上运行 WordCount 示例 但收到以下错误 Exception in thread main java lang UnsupportedClassVersionError WordCount Uns
  • botbuilder v 4,带有下拉菜单并根据提示捕获值的动态自适应卡

    我正在使用 ms botbuilder v 4 我正在使用 webcontrol webchat js 最新 react 案例非常简单 我想在下拉列表中显示可能值的列表 值将是动态的 来自 API 我需要那里的标题和值 Id 然后 当用户选
  • 如何使“发生一个或多个验证错误”引发异常?

    我正在 Core 3 1 上运行 Web API 我的端点之一接受 JSON 其模型具有以下字段 Required 像这样的属性 public class Vendor public int ID get set Required Erro
  • 如何在.net core或.net standard项目中运行VBScript?

    我知道这是死胡同而且愚蠢的想法 但仍然 您知道在 Net Core 或 Net Standard 项目中运行 VBScript 的任何 nuget 或解决方法吗 我尝试使用 ClearScript V8 nuget https www nu
  • 在 Mako 模板中使用 from __future__ import

    I have 在我的模板文件的最顶部 我收到错误 SyntaxError from future imports must occur at the beginning of the file 这样做的正确方法是什么 你不能使用from f
  • 从android执行.bat文件

    我正在尝试执行 xxx bat 文件以从我的 Android 应用程序重命名该文件 听到的是我的代码 Runtime getRuntime exec Environment getExternalStorageDirectory File
  • 如何衡量服务器的请求和响应时间?

    我正在使用 asynctask 和 json 解析来从服务器获取响应 我如何测量请求和响应时间 以下是我的网络服务代码 任何人都可以帮助我吗 public class JSONParser static InputStream is nul
  • 为什么我的 redux 状态没有更新

    状态未更新 当调度操作时 状态应更新为 isAuthenticated 为 true 但状态未更新 redux 返回初始状态而不是更新后的状态 export function setCurrentUser user console log
  • 有什么好的 JavaScript 货币或小数类吗?

    我正在尝试处理 JavaScript 值 例如23 45 但我希望能够对这些值进行数学运算 加法 减法 乘法 除法 而不会遇到浮点问题 是的 有时我可能需要对结果进行四舍五入 但我希望它给出合理的答案 在 JavaScript 中考虑一下
  • 发送的邮件项目无效使用

    背景 The 在这里提问 https stackoverflow com questions 38405423 outlook send event class 38407819 38407819提供了进一步的解释 在这种情况下 我想知道为
  • Angular2 Ng2文件上传CORS问题

    我是新来尝试angular2 我已经安装了 angular2 文件上传 我复制了教程中的所有代码here http valor software com ng2 file upload 我完全复制了开发人员在那里写的内容 但我遇到这样的问题
  • 有没有办法使用 flutter ping 本地 IP 地址?

    我想检查特定设备是否连接到我的网络 我有该设备的 IP 地址 我无法找到使用 flutter 应用程序 ping 该设备的方法 这里的目标是通过 ping 设备来检查特定设备是否连接到本地网络 你能帮我吗 用这个 import dart i
  • 源注释.h ? C++ [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Visua
  • 在SPARQL中使用LIMIT时如何获取结果总数?

    我有一个 SPARQL 查询 它返回结果LIMIT共 20 个 在此查询中 我还想知道结果总数 而无需运行查询两次 一次运行LIMIT和一个没有LIMIT 例如 运行查询时 可能的结果总数为 500 个 其中LIMIT它一次只显示 20 个
  • 如何发送元数据 HTTP POST 请求

    假设我想发送这些类型的请求 其中 json 数据中有 meta 我该如何处理 我把它作为 json 数据 amount 500 narration Test Int l bank transfers currency USD benefic
  • 如何启动一个新的大型 ZF2 项目?

    我将使用 ZF2 创建一个新项目 事实上 我必须升级 ZF1 项目 但我决定从头开始 我的项目非常庞大 已经被来自世界各地的志愿者翻译成 10 种不同的语言 我遇到的困难是分析 ZF2 告诉我要遵循的模块结构 该软件允许 ISP 领域的中小
  • 如何使用 Selenium 找到文本位置?

    我正在尝试使用 Selenium 查找网页上某些文本的位置 我可以使用 isTextPresent 函数来告诉我文本是否出现 但随后我想知道它实际在哪里 更广泛的问题是我想单击此文本 问题是我似乎无法单击此文本 我认为该文本位于页面上嵌入的
  • sqlalchemy中查询相关表

    所以我有两个表 员工 和 详细信息 如下所示 class Employee Base tablename employees id Column Integer Sequence employee id seq primary key Tr