3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
這基本上是這樣做的方式,AFAIK沒(méi)有隨時(shí)可用的快捷方式。
你可以概括它的當(dāng)然:
def get_or_create(session, model, defaults=None, **kwargs):
instance = session.query(model).filter_by(**kwargs).first()
if instance:
return instance, False
else:
params = dict((k, v) for k, v in kwargs.iteritems() if not isinstance(v, ClauseElement))
params.update(defaults or {})
instance = model(**params)
session.add(instance)
return instance, True

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
根據(jù)@WoLpH的解決方案,這是適合我的代碼(簡(jiǎn)單版本):
def get_or_create(session, model, **kwargs):
instance = session.query(model).filter_by(**kwargs).first()
if instance:
return instance
else:
instance = model(**kwargs)
session.add(instance)
session.commit()
return instance
有了這個(gè),我就可以get_or_create我的模型的任何對(duì)象。
假設(shè)我的模型對(duì)象是:
class Country(Base):
__tablename__ = 'countries'
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
為了獲取或創(chuàng)建我的對(duì)象,我寫道:
myCountry = get_or_create(session, Country, name=countryName)
添加回答
舉報(bào)