覆盖sqlalchemy中的__eq__运算符

时间:2013-05-26 10:35:14

标签: python sqlalchemy

我正在使用声明性基础SQLAlchemy。我需要一个可以为空的字符串列,但不会出现与数据库一起出现的NULL!= NULL问题。所以我写了一个基于String的自定义“装饰”类型,它只是存储了哨兵值“NONE”而不是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()

返回:

[]     

但:

  db_session.query(SomeModel).filter(SomeModel.nullable_col == "NONE").all()

返回几个对象。

我已尝试覆盖__eq__课程中的NullableString运算符,但仍然无法使其运行。

1 个答案:

答案 0 :(得分:0)

使用CustomComparators覆盖过滤条件。

你的NullableString类型只是“绑定值/映射器”