我正在使用声明性基础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
运算符,但仍然无法使其运行。