我试图从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)的文档中,很难知道应该怎么做(有一些叫做“傻瓜”的操作,但我很难理解它与上述问题的关系)
答案 0 :(得分:0)
找出我自己的问题的答案。 SQLAlchemy将这些指令发送到某个sql后端,因此它们直接处理后端中值的表示(在本例中为字符串)。重新定义时,相等操作可以强制other
成为一个小数的字符串,然后在字符串之间执行sql相等操作。但是,比较器本身不执行操作。