Python 重写sqlalchemy中的_eq__运算符

Python 重写sqlalchemy中的_eq__运算符,python,sqlalchemy,Python,Sqlalchemy,我正在使用声明性的基本SQLAlchemy。我需要一个字符串列,该列可以为NULL,但不能为NULL!=与数据库一起出现的空问题。因此,我编写了一个基于字符串的自定义“修饰”类型,它只存储哨兵值“NONE”而不是NULL,这样我就可以使它成为不可为NULL的行 class NullableString(TypeDecorator): '''Turns None into the string "Null" and back in order to prevent Null!=Null

我正在使用声明性的基本SQLAlchemy。我需要一个字符串列,该列可以为NULL,但不能为NULL!=与数据库一起出现的空问题。因此,我编写了一个基于字符串的自定义“修饰”类型,它只存储哨兵值“NONE”而不是NULL,这样我就可以使它成为不可为NULL的行

class NullableString(TypeDecorator):
     '''Turns None into the string "Null" and back in order to prevent Null!=Null issues'''
    impl = String
    def process_bind_param(self, value, dialect):
        return "NONE" if value is None else value
    def process_result_value(self, value, dialect):
        return None if value == "NONE" else value
问题是,当我对NullableString类型的列执行查询时,我无法获得结果,即:

  db_session.query(SomeModel).filter(SomeModel.nullable_col == None).all()
返回:

[]     
但是:

返回多个对象

我已尝试覆盖
NullableString
类中的
\uuuu eq\uuu
运算符,但仍然无法使其工作。

用于覆盖筛选器条件


您的NullableString类型仅为“bind value/mapper”

请说明您的数据库后端。ORM旨在将后端差异抽象出来,但是None vs Null vs empty string问题在后端实现中存在细微差异抱歉,应该说MySQL,但是在这种情况下,后端并不重要:我只是想让一个后端不可知的解决方案不总是等于NULL。这似乎是错误的解决方案,比较行为应该被限制在我的新类型中。以文档为例:您永远无法查询这些值
  db_session.query(SomeModel).filter(SomeModel.nullable_col == "NONE").all()