我有下面的一小段代码来创建对象曲线。创建新曲线后,它首先运行方法__new__
。它检查此曲线是否已存在于数据库中,如果存在,则返回此曲线。
在空数据库上创建新曲线时,它会按预期返回None
。如果它是在name
已经存在的情况下创建的,那么它会抛出一个错误并指出KeyError: 'name'
(这里不是很多信息......)。
class Curve(Base):
__tablename__ = 'curve'
id = Column(Integer, primary_key = True)
name = Column(String, unique = True)
type = Column(String)
# We override the new method to first check if the object already exists
# If it does exist then we return this object
def __new__(*cls, **kw):
x = base.session.query(Curve).filter(Curve.name==kw["name"]).first()
if x: return x
return object.__new__(*cls, **kw)
def __init__(self, type, name):
self.type = type
self.name = name
self.add(False)
def add(self, commit):
create(base.session, self, commit, name=self.name)
有趣的是,如果不返回整个曲线,我们只返回一个属性,例如
x = base.session.query(Curve.name).filter(Curve.name==kw["name"]).first()
然后它运作得很好......
有什么想法吗?
答案 0 :(得分:0)
您可以尝试将 __ new __ 方法更新为此。
def __new__(cls, **kw):
x = base.session.query(Curve).filter(Curve.name==kw["name"]).first()
if x: return x
return super(Curve, cls).__new__(**kw)