SQLAlchemy是否具有相当于Django的get_or_create?

问题:

如果它已经存在(基于提供的参数),我想从数据库获取一个对象,如果没有,则创建它。
Django的get_or_create(或source)这样做。 SQLAlchemy中有相应的快捷方式吗?
我目前正在写明:

def get_or_create_instrument(session, serial_number):
    instrument = session.query(Instrument).filter_by(serial_number=serial_number).first()
    if instrument:
        return instrument
    else:
        instrument = Instrument(serial_number)
        session.add(instrument)
        return instrument

回答:

这基本上是这样做的,AFAIK没有捷径。
你可以推广它:

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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Does SQLAlchemy have an equivalent of Django’s get_or_create?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 21 = 30