sqlalchemy重新定义运营商

时间:2014-06-06 20:58:55

标签: python sqlalchemy

我试图从sqlalchemy中的String派生一个MyFraction类,并覆盖运算符,以便将字符串按分数排序。

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

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)的文档中,很难知道应该怎么做(有一些叫做“傻瓜”的操作,但我很难理解它与上述问题的关系)

1 个答案:

答案 0 :(得分:0)

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