我有以下ORM结构:
class ParamWrapper:
def __init__(self, param):
self.param = param
def __composite_values__(self):
return self.param
class Game(Base):
__tablename__ = 'game'
game_id = Column(Integer, primary_key=True)
raw_param = Column(UnicodeText, unique=True)
param = composite(ParamWrapper, raw_param)
如何制作raw_param is None
,param is None
。
答案 0 :(得分:0)
我会使用 hybrid_property 来解决这个问题,因为你需要一个条件。 Composite始终返回复合类。如果返回值需要为None而不是ParamWrapper(None),则唯一的方法是在某处分支。
from sqlalchemy.ext.hybrid import hybrid_property
...
class ParamWrapper:
def __init__(self, param):
self.param = param
def __composite_values__(self):
return self.param
class Game(Base):
__tablename__ = 'game'
game_id = Column(Integer, primary_key=True)
raw_param = Column(UnicodeText, unique=True)
param_raw = composite(ParamWrapper, raw_param)
@hybrid_property
def param(self):
return self.param_raw if self.raw_param is not None else None
这使你的Game.param成为ParamWrapper的实例或None。
可以讨论这个问题的用处,因为您需要访问foo.param.param以从查询结果对象获取实际值。如果foo.param为None,则会因异常而失败。您当然可以修改hybrid属性以返回self.param_raw.param,如果您只对对象的内容感兴趣而不是对象本身。然后你会有这个或无,但从来没有例外。
哈努哈利