get_or_create without autocommit
It creates an exception (or savepoint, if a transaction is present) to ensure the connection can be restored to a good state after an IntegrityError. Postgres, for instance, is rather unforgiving regarding this.

I'll add something to the docs, but for now I don't really see this as a bug.
 In your example code, is there a reason you're not using the `atomic()` context manager / decorator? The `atomic()` helper will manage a stack of transactions/savepoints behind-the-scenes.
 > In your example code, is there a reason you're not using the atomic() context manager / decorator?

I was reproducing my use case. It indeed works with atomic, but I can't use it for what I want to do.

Shouldn't atomic then also create a savepoint rather than create a new transaction when inside a begin ?
 So I was able to have something working with the following:

``` python
self._transaction = db.transaction()
self._transaction.__enter__()
# [...]
self._transaction.__exit__(True, None, None)
```

It isn't very intuitive though.
 Yeah, atomic will create a savepoint if there is a transaction in progress.

You can write your own `get_or_create()` that doesn't use a transaction/savepoint. Or you can use a decorator/context manager to manage your explicit transactions.

Hello,

`get_or_create` and `create_or_get` fails if autocommit is set to False due to the use of a transaction inside these methods:

https://github.com/coleifer/peewee/blob/master/peewee.py#L4562
https://github.com/coleifer/peewee/blob/master/peewee.py#L4573

I created a test demonstrating this issue:

https://github.com/Gagaro/peewee/commit/cb64cce3e473187bc4284357941185088b3de57b

Also only these two methods create a transaction. Why is a transaction needed here?

Thanks
