Returns on inserts
The code gets a bit difficult when it's trying to figure out what to return for insert queries when the db supports returning clauses. By default we want to select the table's primary key and return the last-inserted ID...but if the user specifies something else, we probably should return a cursor over the returned results.

In the current code, you should be able to do this:

```python

class ServerDefault(Model):
    timestamp = DateTimeField(constraints=[SQL('default (now())')])

query = ServerDefault.insert().returning(ServerDefault.id, ServerDefault.timestamp)
last_id = query.execute()
new_rows = list(query)
new_id, new_timestamp = new_rows[0]
```

I made a small fix, which will cause `execute()` to return the cursor if the returning clause is non-default, so in master you would write:

```python
query = ServerDefault.insert().returning(ServerDefault.id, ServerDefault.timestamp)
cursor = query.execute()
new_id, new_timestamp = cursor[0]
```

Thanks for bringing this to my attention -- it highlighed a fragile API. The API is still more fragile than I would like, but hopefully it's more obvious now... If you specify a returning clause, you'll get a cursor back -- whether inserting one row or multiple rows. It didn't occur to me to check the query object after execution for some reason. Thanks for pointing that out.

I really appreciate your help with this! And thanks for the awesome project. No worries, glad to help. Once I push a new release (3.1.2) the query will directly return a cursor object so it won't be quite so confusing hopefully.
I'm having a little trouble with peewee's insert query. 

It would be ideal if  `<ModelInstance>.create()` would allow for returning all columns. I know it returns primary keys automatically, but I have a model that has server side defaults besides the primary key that I need to render in a response after inserting a row.

However, given that implementation may not be likely (or at least not soon), I turned to `<ModelInstance>.insert().returning(<column_list>).execute()`. I don't pass anything to insert yet because I'm testing on a table with two columns, one being of type bigserial, one being of type timestamp with tz, both with values generated on the db server side.

I've tracked through a significant portion of the code executed from that line of code, and in doing so, I came across `last_insert_id`, a function that checks the `query_type` param. In the case of the code I executed for the insert, `query_type` is `Insert.SIMPLE`, which is equal to 0. Then, `last_insert_id` executes this line: `return cursor if query_type else cursor[0][0]`, which scraps the result set I had achieved by invoking the returning function and just returns the id of the inserted row. I can't tell if that is a bug and this line should read `return cursor if query_type is not None else cursor[0][0]`, or if that was intended. If it is intended to affect the `Insert.SIMPLE` query type, it seems as though it should also check if `.returning` was used.