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