如何通过 SQLAlchemy 中的自定义函数进行排序

2023-12-19

所以我有一个 SQLALchemy 模型,如下所示

from sqlalchemy import (create_engine, Column, BigInteger, String, 
                        DateTime)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.hybrid import hybrid_property

Base = declarative_base()

class Trades(Base):

    __tablename__ = 'trades'

    row_id = Column(BigInteger, primary_key=True, autoincrement=True)
    order_id = Column(String)
    time = Column(DateTime)
    event_type = Column(String)

    @hybrid_property
    def event_type_to_integer(self):
        return dict(received=0, open=1, done=2)[self.event_type]

    @event_type_to_integer.expression
    def event_type_to_integer(self):
        pass

我希望能够首先通过time然后由event_type。按时间排序非常容易,因为日期时间具有自然排序。但是订购方式为event_type有点棘手,因为event_type可以取值received, open, and done。我希望所有查询都按以下顺序排序event_type按照上述指定的顺序。看来我需要使用混合属性,这是我在上面开始做的,但是为了获得order_by函数工作似乎我还需要写

    @event_type_to_integer.expression
    def event_type_to_integer(self):
        pass

功能。这就是我要画空白的地方。有谁对如何编写这个函数来执行上述操作有建议吗?我尝试阅读文档和类似的 StackOverflow 帖子。还是有麻烦。以供参考。这是我试图开始工作的查询

    sess = Session()

    orders = (
        sess
        .query(Trades)
        .order_by(Trades.time.asc(), Trades.event_type_to_integer.asc())
        .all()
        )

    sess.close()

它正在抛出一个

KeyError: <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7fcb11861048>

你可以用一个来实现你的查找CASE表达 https://www.postgresql.org/docs/current/functions-conditional.html#FUNCTIONS-CASE in SQL:

from sqlalchemy import case

_event_type_lookup = dict(received=0, open=1, done=2)

class Trades(Base):
    ...
    @hybrid_property
    def event_type_to_integer(self):
        return _event_type_lookup[self.event_type]

    @event_type_to_integer.expression
    def event_type_to_integer(cls):
        return case(_event_type_lookup, value=cls.event_type)

这使用了value https://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.case.params.value的简写case() https://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.case构造以生成一个表达式,该表达式将给定的列表达式与字典中传递的键进行比较,生成映射值作为结果。

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

如何通过 SQLAlchemy 中的自定义函数进行排序 的相关文章

随机推荐

  • ASP.NET 5添加WCF服务参考

    在 Visual Studio 2015 预览版 预发行版 中 如何添加服务引用WCF服务 目前 这是一个相当复杂的过程 因为该工具似乎不太支持生成 WCF 客户端代码或从配置文件自动映射的方式 另外 正如 dotnetstep 指出的那样
  • 如何更改默认版权模板

    每当我在 xcode 中创建一个新文件时 它都会在文件顶部放置类似的内容 Copyright MyCompanyName 2008 All rights reserved 我怎样才能把它变成有用的东西 Update 在这里找到了答案 htt
  • 是否可以在 R Shiny 中动态设置小部件选项?

    作为一个最小的工作示例 An app with a datatable whose pagination option we can toggle with a button library shiny runApp list ui bas
  • 如何使用 d3.js 为线条添加动画?

    所以我的线从图表的一侧延伸到另一侧 但它并没有真正通过每个数据点进行动画处理 我认为我必须在某处添加一个循环 这是相关代码 任何帮助将不胜感激 assign start coordinates for each piece of data
  • 创建 AngularJS ACL 的最佳方法是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想与您 社区 分享我的问题 I use MEAN堆栈 所以我使用Node js with Express and AngularJS
  • 如果有条件执行任务,异步方法应该做什么?

    假设我有一个等待任务的方法 该方法还返回一个任务 例如 public async virtual Task Save String path if NewWords Any await FileManager WriteDictionary
  • React-Native 另一个 VirtualizedList 支持的容器

    升级到react native 0 61后 我收到很多这样的警告 VirtualizedLists should never be nested inside plain ScrollViews with the same orientat
  • iOS开发:收到Game Center邀请时,如何获取GKMatch对象?

    我正在构建一款使用 Game Center 的 iPhone 游戏 但我很难理解如何开始一场通过收到朋友的玩邀请而开始的比赛游戏 这docs http developer apple com library ios documentatio
  • 根据给定值构造新的哈希值

    我似乎迷失了尝试实现以下目标 我尝试了一整天 请帮助 I HAVE h kv1001 gt impressions gt b gt 0 245 a gt 0 754 visitors gt b gt 0 288 a gt 0 711 ctr
  • 如何设置java keytool的默认语言?

    我使用带有英语和美式键盘设置的 Windows 操作系统 我使用这个命令来生成密钥库 效果很好 C java6 jre bin keytool genkey keyalg RSA alias mykey validity 3652 keys
  • 如何使用钩子通过一个事件处理函数动态更新任何输入字段的值

    TL DR 有没有一种方法可以通过一个事件动态更新输入字段的值 处理函数就像我们对有状态组件所做的那样 我正在制作一个包含 2 个字段的登录表单 电子邮件和密码 当我使用 2 个 useState 代表两个字段时 当我使用 handleCh
  • R过滤掉一个子集

    我有一个数据框A 和一个包含 A 子集的 data frame B 如何创建一个 data frame C 它是 data frame A 且排除了 data frame B 感谢您的帮助 获取 A 中 B 中没有的行 C A data f
  • 如何在 Eclipse 中从自动构建中排除一个项目?

    如何在 Eclipse 中从自动构建中排除一个项目 我的工作区中有一个项目 该项目可能构建很长 即使没有任何更改 我想保持这个项目打开以浏览源代码 但我不需要它一直在构建 如何禁用该项目的自动构建 这可能是 Eclipse 中的一个错误ht
  • 引发“System.Windows.Forms.AxHost+InvalidActiveXStateException”类型的异常

    我在我的简单项目中遇到错误 这是我的代码 if axZKFPEngX1 InitEngine 0 label1 Text Connected else label1 Text Connection Failed 我已经添加了参考复合材料Ax
  • 从实体框架中删除单个记录?

    我在实体框架中有一个名为的 SQL Server 表employ具有名为的单个键列ID 如何使用实体框架从表中删除单个记录 不必先查询对象 您可以通过其 id 将其附加到上下文 像这样 var employer new Employ Id
  • 如何提取Go内置函数代码,例如delete()

    我在go src go src builtin builtin go 中找到了内置函数 如下 func delete m map Type Type1 key Type 但这不是源代码 谁能告诉我内置函数的源代码在哪里 builtin go
  • 运行 npm 命令时 -- 做什么?

    例如 双破折号或两个连字符 像这样使用 npm test coverage Running npm没有双破折号标志不会在覆盖模式下运行 因此它似乎附加了后续标志 这是正确的吗 我找不到这方面的文档 作为参数本身在所有 UNIX 命令中都是标
  • const 用于非引用参数

    如果我有这个代码 void Foo aBasicType aIn Where aBasicType is int char etc 制作它有什么意义吗const aBasicType因为无论如何它都会被复制 我问的原因之一是因为我在第 3
  • 如何在 Javascript 中正确使用 mixin

    我正在组织一个小型企业应用程序 但希望尽可能干燥 因此 我一直在研究 mixin 库 我遇到了这个library https github com kmalakoff mixin并认为这可能是一个不错的选择 因为它允许您在运行时混合输入和输
  • 如何通过 SQLAlchemy 中的自定义函数进行排序

    所以我有一个 SQLALchemy 模型 如下所示 from sqlalchemy import create engine Column BigInteger String DateTime from sqlalchemy ext dec