3

我正在使用声明性基础 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但仍然无法使其工作。

4

1 回答 1

0

使用CustomComparators覆盖过滤条件。

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

于 2013-05-27T10:30:42.117 回答