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中按自定义函数排序

        How can I order by a custom function in SQLAlchemy(如何在SQLAlChemy中按自定义函数排序)
        • <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中按自定义函数排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Split a Pandas column of lists into multiple columns(将 Pandas 的列表列拆分为多列)
                  How does the @property decorator work in Python?(@property 装饰器在 Python 中是如何工作的?)
                  What is the difference between old style and new style classes in Python?(Python中的旧样式类和新样式类有什么区别?)
                  How to break out of multiple loops?(如何打破多个循环?)
                  How to put the legend out of the plot(如何将传说从情节中剔除)
                  Why is the output of my function printing out quot;Nonequot;?(为什么我的函数输出打印出“无?)

                      <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>

                        <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>
                            <tbody id='gwz8e'></tbody>