SQLAlchemy 自定义查询列

2024-01-27

我有一个如下定义的声明表:

class Transaction(Base):
    __tablename__ = "transactions"
    id = Column(Integer, primary_key=True)
    account_id = Column(Integer)
    transfer_account_id = Column(Integer)
    amount = Column(Numeric(12, 2))
    ...

查询应该是:

SELECT id, (CASE WHEN transfer_account_id=1 THEN -amount ELSE amount) AS amount
FROM transactions
WHERE account_id = 1 OR transfer_account_id = 1

我的代码是:

query = Transaction.query.filter_by(account_id=1, transfer_account_id=1)
query = query.add_column(case(...).label("amount"))

但它并不能取代amount column.

我已经尝试这样做几个小时了,但我不想使用原始 SQL。


您所做的任何查询都不会取代原始查询amount柱子。但是您可以使用以下查询加载另一列:

q = session.query(Transaction,
                  case([(Transaction.transfer_account_id==1, -1*Transaction.amount)], else_=Transaction.amount).label('special_amount')
                  )
q = q.filter(or_(Transaction.account_id==1, Transaction.transfer_account_id==1))

这不会仅返回Transaction对象,而是tuple(Transaction, Decimal)


但如果您希望此属性成为对象的一部分,那么:
自从你的case when ...函数完全独立于条件WHERE,我建议您按以下方式更改代码:

1)向你的对象添加一个属性,它的作用是case when ...检查如下:

@property
def special_amount(self):
    return -self.amount if self.transfer_account_id == 1 else self.amount

您还可以完全包装对金额的特殊处理,并提供 setter 属性:

@special_amount.setter
def special_amount(self, value):
    if self.transfer_account_id is None:
        raise Exception('Cannot decide on special handling, because transfer_account_id is not set')
    self.amount = -value if self.transfer_account_id == 1 else value

2)修复您的查询,使其仅包含一个过滤子句or_子句(看起来您的查询根本不起作用):

q = session.query(Transaction).filter(
    or_(Transaction.account_id==1, 
        Transaction.transfer_account_id==1)
)

# then get your results with the proper amount sign:
for t in q.all():
    print q.id, q.special_amount
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLAlchemy 自定义查询列 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • Chrome 中的窗口高度错误

    我正在尝试获取 Chrome 浏览器窗口的正确宽度和高度 Firefox 中的大小是正确的 我没有尝试过任何其他浏览器 我已将文档类型设置为 DOCTYPE html并尝试过 window height window width windo
  • 在自定义活动中绘制 TextView?

    我正在实施一个自定义View 我需要在其中绘制一些文本 文本必须适合一个盒子 所以我必须将其分解并使其适合 因此 我想我可以使用TextView并在我的自定义中绘制它View 这是我尝试过的 canvas drawRoundRect rec
  • 如何在 Two.js 中解释外部 svg 文件

    有什么方法可以在two js 中解释带有对象标记的外部svg 文件吗 我尝试了下面的方法但是 HTML JS var mySvg document getElementById mysvg contentDocument var shape
  • Maven Dll依赖问题

    我正在开发一个基于 swing 的桌面应用程序 该应用程序使用 MediaInfo dll 库 我首先像描述的那样将此 dll 安装到我的本地存储库这个答案 https stackoverflow com questions 1001774
  • java中导入语句的顺序[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 想知道 哪种是订购导入声明的正确方法 另外哪个具有更高的可读性 like 外部课程 如java util List 然后是内部包类 仅按字母顺序
  • Tensorflow 中 sess.run([op1, op2...]) 的顺序

    我想知道 sess run ops list 中操作列表的运行顺序是什么 例如 对于典型的分类场景 loss sess run train op loss op if train op先运行 那么损失就是当前反向传播之后的损失 但如果los
  • Python,导入错误:未定义的符号:g_utf8_skip

    StackOverflow 上大约有几十个类似的问题 但经过几个小时的潜伏 我终于放弃了 所以我正在尝试为Python编写一个C扩展 我们就这样称呼它吧mylib 这是头文件 mylib h ifndef mylib H define my
  • 如何使用 JSqlParser 添加新条件?

    我想向我的 sql 添加新条件 例如如果查询是 SELECT EMP ID FIRST NAME FROM EMPLOYEES 我可以使用此代码添加新的原因 Override protected void setLimit final Pl
  • 通过应用自定义 css 类禁用 html 输入元素

    我想通过应用我的自定义 css 类来禁用 div 的所有输入元素 但我找不到任何可以禁用输入元素的 css 属性 目前我在做什么 div sercvice detail input attr disabled true retention
  • 找不到 Webpackject.preload.js 文件[重复]

    这个问题在这里已经有答案了 我将 Vue Typescript 与 webpack 结合使用 每次我打开页面inject preload js抛出一个错误 例如GET blob http URL 1fbc0606 8477 416b a45
  • Javascript 闭包和内存问题

    Following function add new table entry to table and return interface which has function which uses closure to access and
  • 什么是 .inc 以及为什么使用它?

    我经常在 PHP 中看到包含 inc 文件的示例 inc 是什么意思 它是用来做什么的 使用它有什么缺点和优点 它没有任何意义 只是一个文件扩展名 如果该文件被设计为被其他 PHP 文件包含 则某些人习惯用 inc 扩展名命名该文件 但这只
  • Nuxt3生成类型错误:无法读取null的属性(读取'isCE')

    我在我的应用程序中使用 Nuxt3 Vite Leaflet Bootstrap 该应用程序在开发中运行良好 但是当我尝试使用生成静态站点时npm run generate 我收到以下错误 类型错误 无法读取 null 的属性 读取 isC
  • 通过 python 使用 Google Drive API V3 获取 Google Drive 文件所有者电子邮件地址

    我无法通过 Google Drive API v3 获取 Google 云端硬盘上文件的所有者 我可以在 v2 下做到这一点 但事情已经改变了 根据文档 https developers google com drive api v3 re
  • 在Android Studio中使用自定义框架库(android.jar)

    我有自己的定制框架 android jar 并想在 Android Studio 中使用它 我的 build gradle 中有如下描述 dependencies compile files myandroid jar 但Android S
  • 如何将material-ui时间选择器更改为24小时格式

    目前使用的是Timepicker来自材料用户界面 我已将其设置为type time 它允许我通过 AM PM 选项选择一天中 12 小时内的时间 我希望我的选择器采用 24 小时格式 从而删除 AM PM 选项 我查看了material u
  • 为什么变量在更改其因变量后没有更新? [复制]

    这个问题在这里已经有答案了 我不明白为什么当我更改 x 时变量 y 不更新 y 变量依赖于 x 对吧 x 5 y x 2 print x print y x 3 Expect it to print 3 and 6 instead it p
  • 我可以在 robots.txt 中使用“Host”指令吗?

    Searching for specific information on the robots txt I stumbled upon a Yandex help page http help yandex com webmaster c
  • 为什么此保存方法不调整图像大小?

    我重写保存方法以便在上传后调整图像大小 以下代码似乎并未调整图像大小 我仔细检查了媒体文件夹 发现上传图像的原始尺寸 900x850 只有一份副本 Django 没有抛出任何错误 所以我不知道如何解决这个问题 需要明确的是 我可以毫无问题地
  • SQLAlchemy 自定义查询列

    我有一个如下定义的声明表 class Transaction Base tablename transactions id Column Integer primary key True account id Column Integer