【问题标题】:sqlalchemy redefining operatorsqlalchemy 重新定义运算符
【发布时间】:2014-06-07 13:46:06
【问题描述】:

我正在尝试从 sqlalchemy 中的 String 派生 MyFraction 类并覆盖运算符,以便字符串像分数一样排序。

下面的代码失败了(我意识到 self 是比较器工厂),但我不确定如何让它工作:

from sqlalchemy import Column, Integer, String
from fractions import Fraction

class MyFraction(String):
  class comparator_factory(String.Comparator):
    def __eq__(self, other) :
      return Fraction(self) == Fraction(other)
    def __ne__(self, other) :
      return Fraction(self) != Fraction(other)
    def __gt__(self, other) :
      return Fraction(self) > Fraction(other)
    def __lt__(self, other) :
      return Fraction(self) < Fraction(other)

从关于 sqlalchemy (http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#redefining-and-creating-new-operators) 的文档中,很难知道应该怎么做(有一个叫做“goofy”的操作,但我很难理解它与上述问题的关系)。

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    想出了我自己问题的答案。 SQLAlchemy 将这些指令发送到一些 sql 后端,因此它们直接处理后端中值(在本例中为字符串)的表示。重新定义相等操作时,可以将other强制转换为分数中的字符串,然后在字符串之间执行sql相等操作。但是,比较器本身并不执行操作。

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 2023-04-03
      • 2011-01-24
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多