1. <tfoot id='C7GQn'></tfoot>
      2. <small id='C7GQn'></small><noframes id='C7GQn'>

        <i id='C7GQn'><tr id='C7GQn'><dt id='C7GQn'><q id='C7GQn'><span id='C7GQn'><b id='C7GQn'><form id='C7GQn'><ins id='C7GQn'></ins><ul id='C7GQn'></ul><sub id='C7GQn'></sub></form><legend id='C7GQn'></legend><bdo id='C7GQn'><pre id='C7GQn'><center id='C7GQn'></center></pre></bdo></b><th id='C7GQn'></th></span></q></dt></tr></i><div id='C7GQn'><tfoot id='C7GQn'></tfoot><dl id='C7GQn'><fieldset id='C7GQn'></fieldset></dl></div>
          <bdo id='C7GQn'></bdo><ul id='C7GQn'></ul>

        <legend id='C7GQn'><style id='C7GQn'><dir id='C7GQn'><q id='C7GQn'></q></dir></style></legend>

        如何在SQLAlChemy中按自定义函数排序

        时间:2024-04-20
        • <bdo id='XSHLf'></bdo><ul id='XSHLf'></ul>
        • <legend id='XSHLf'><style id='XSHLf'><dir id='XSHLf'><q id='XSHLf'></q></dir></style></legend>

            <small id='XSHLf'></small><noframes id='XSHLf'>

                <i id='XSHLf'><tr id='XSHLf'><dt id='XSHLf'><q id='XSHLf'><span id='XSHLf'><b id='XSHLf'><form id='XSHLf'><ins id='XSHLf'></ins><ul id='XSHLf'></ul><sub id='XSHLf'></sub></form><legend id='XSHLf'></legend><bdo id='XSHLf'><pre id='XSHLf'><center id='XSHLf'></center></pre></bdo></b><th id='XSHLf'></th></span></q></dt></tr></i><div id='XSHLf'><tfoot id='XSHLf'></tfoot><dl id='XSHLf'><fieldset id='XSHLf'></fieldset></dl></div>
              1. <tfoot id='XSHLf'></tfoot>

                    <tbody id='XSHLf'></tbody>

                1. 本文介绍了如何在SQLAlChemy中按自定义函数排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  所以我有一个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可以接受值receivedopendone。我希望我的所有查询按上述指定顺序按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>
                  

                  推荐答案

                  您可以在sql中使用CASE expression实现查找:

                  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结构的简写case()生成一个表达式,该表达式将给定列表达式与字典中传递的键进行比较,从而生成映射值作为结果。

                  这篇关于如何在SQLAlChemy中按自定义函数排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:使用SQLAlChemy会话作为上下文管理器时,接收&quot;属性错误:__Enter__&Quot; 下一篇:错误&quot;filename.whl不是此平台&quot;上支持的轮子

                  相关文章

                      <bdo id='gwz8e'></bdo><ul id='gwz8e'></ul>
                    1. <i id='gwz8e'><tr id='gwz8e'><dt id='gwz8e'><q id='gwz8e'><span id='gwz8e'><b id='gwz8e'><form id='gwz8e'><ins id='gwz8e'></ins><ul id='gwz8e'></ul><sub id='gwz8e'></sub></form><legend id='gwz8e'></legend><bdo id='gwz8e'><pre id='gwz8e'><center id='gwz8e'></center></pre></bdo></b><th id='gwz8e'></th></span></q></dt></tr></i><div id='gwz8e'><tfoot id='gwz8e'></tfoot><dl id='gwz8e'><fieldset id='gwz8e'></fieldset></dl></div>
                    2. <small id='gwz8e'></small><noframes id='gwz8e'>

                      <legend id='gwz8e'><style id='gwz8e'><dir id='gwz8e'><q id='gwz8e'></q></dir></style></legend>

                      <tfoot id='gwz8e'></tfoot>