enhancement for doing get/update/create at the same time
Pass [similar commit](https://github.com/coleifer/peewee/commit/073364ad89a8de48f4a25bbf6106bf42050d34fa)
here's the following code. it's been tested on some schema with one single unique key.

```python
# peewee.py:7119

    @classmethod
    def get_and_update_or_create(cls, _unique_keys:list=[],**kwargs):
        try:
            obj, flag = cls.get_or_create(
                **kwargs
            )  # will it update this thing? let's see.
        except:
            flag = False
        if not flag:
            fieldNames = [
                name for name, x in cls.__dict__.items() if type(x) == FieldAccessor
            ]
            uniqueKeyNames = _unique_keys
            for name in fieldNames:
                field = cls.__dict__[name].field
                if field.unique:
                    uniqueKeyNames.append(name)
                if field.primary_key:
                    primaryKeyName = name
            # use or/and? better use and.
            uniq_or_primary_key_names_shared_with_kwargs_keys = [
                name
                for name in set([primaryKeyName] + uniqueKeyNames)
                if name in kwargs.keys()
            ]
            # print(dir(cls))
            # print(uniqueKeyNames)
            # print(uniq_or_primary_key_names_shared_with_kwargs_keys)
            # breakpoint()
            operand = None
            for name in uniq_or_primary_key_names_shared_with_kwargs_keys:
                val = cls.__dict__[name].field == kwargs[name]
                if operand is None:
                    operand = val
                else:
                    operand = operand & val
            cls.update(**{key:value for key, value in kwargs.items() if key not in uniq_or_primary_key_names_shared_with_kwargs_keys}).where(
                operand
            ).execute() # damn it.
            # breakpoint() # what is the update result?
            obj= cls.get_or_none(**kwargs) # none?
        return obj, flag

```