def get_or_create(session, model, defaults=None, **kwargs):
"""
Generic method to get or create a SQLalchemy object from database
"""
if defaults is None:
defaults = {}
try:
query = session.query(model).filter_by(**kwargs)
instance = query.first()
if instance:
return instance, False
else:
session.begin(nested=True)
try:
params = dict((k, v) for k, v in kwargs.items() if not isinstance(v, ClauseElement))
params.update(defaults)
instance = model(**params)
session.add(instance)
session.commit()
return instance, True
except IntegrityError as e:
session.rollback()
instance = query.one()
return instance, False
except Exception as e:
raise e
评论列表
文章目录