zoukankan      html  css  js  c++  java
  • get_or_create update_or_create

    django/query.py at master · django/django https://github.com/django/django/blob/master/django/db/models/query.py


    def get_or_create(self, defaults=None, **kwargs):
    """
    Look up an object with the given kwargs, creating one if necessary.
    Return a tuple of (object, created), where created is a boolean
    specifying whether an object was created.
    """
    # The get() needs to be targeted at the write database in order
    # to avoid potential transaction consistency problems.
    self._for_write = True
    try:
    return self.get(**kwargs), False
    except self.model.DoesNotExist:
    params = self._extract_model_params(defaults, **kwargs)
    return self._create_object_from_params(kwargs, params)


    def update_or_create(self, defaults=None, **kwargs):
    """
    Look up an object with the given kwargs, updating one with defaults
    if it exists, otherwise create a new one.
    Return a tuple (object, created), where created is a boolean
    specifying whether an object was created.
    """
    defaults = defaults or {}
    self._for_write = True
    with transaction.atomic(using=self.db):
    try:
    obj = self.select_for_update().get(**kwargs)
    except self.model.DoesNotExist:
    params = self._extract_model_params(defaults, **kwargs)
    # Lock the row so that a concurrent update is blocked until
    # after update_or_create() has performed its save.
    obj, created = self._create_object_from_params(kwargs, params, lock=True)
    if created:
    return obj, created
    for k, v in resolve_callables(defaults):
    setattr(obj, k, v)
    obj.save(using=self.db)
    return obj, False



  • 相关阅读:
    C++函数模板的显示调用与隐式调用
    git显示颜色配置
    STL容器元素应满足的条件
    vector缩减容量
    PAT (Basic Level) Practise:1036. 跟奥巴马一起编程
    Core Java Volume I — 4.10. Class Design Hints
    Core Java Volume I — 4.7. Packages
    蓝牙(Profile)构成
    Android开发之Java必备基础
    主机控制器接口(HCI)
  • 原文地址:https://www.cnblogs.com/rsapaper/p/13334115.html
Copyright © 2011-2022 走看看