您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQLAlchemy是否具有与Django的get_or_create等效的功能?

SQLAlchemy是否具有与Django的get_or_create等效的功能?

基本上就是这样做的方法,没有快捷方式可供使用的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

在@WoLpH解决方案之后,这是对我有用的代码(简单版本):

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

这样,我就可以get_or_create我的模型的任何对象。

假设我的模型对象是:

class Country(Base):
    __tablename__ = 'countries'
    id = Column(Integer, primary_key=True)
    name = Column(String, unique=True)

获取或创建我的对象,我写:

myCountry = get_or_create(session, Country, name=countryName)
SQLServer 2022/1/1 18:18:13 有555人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶