Unexpected results when using insert_many
Yes, this is expected. You need to provide dictionaries with the *same* keys and values (or tuples of the same length). When you issue a SQL bulk insert, you list the expected columns, then the tuples of values, e.g.:

```sql
insert into tbl_name (cola, colb, colc) values (?, ?, ?), (?, ?, ?), (?, ?, ?)
```

So you list that you're inserting into "tbl_name" (columns "a", "b" and "c"). You need to provide values for all 3 columns for each row inserted.

If columns are not explicitly specified when doing a bulk insert with Peewee, then Peewee inspects the first row being inserted to derive the list of columns being inserted. Your second example, Peewee would assume you are inserting values for columns "email" and "first_name".

So you're trying to do:

```sql
insert into testaccount (email, first_name) values (?, ?), (?, <error! no value>)
```

Which doesn't work.

Just make sure your dictionaries all contain the same fields *or* explicitly specify the fields you wish to insert.

http://docs.peewee-orm.com/en/latest/peewee/api.html#Model.insert_many
When you try to insert_many, different first objects lead to different results. See below:

```python
#models.py
from peewee import (
    MySQLDatabase,
    Model,
    CharField
)
from playhouse.db_url import connect

db_url = 'mysql://root@localhost/test'
db = connect(db_url)

class TestAccount(Model):
    email = CharField()
    first_name = CharField(null=True, default=None)

    class Meta:
        database = db
```
```python
#app.py
from models import TestAccount, db

# Result: all first_name are set to null
#1	temp@hotmail.com	NULL
#2	temp2@hotmail.com	NULL
users_1 = [
    {
        'email': 'temp@hotmail.com'
    },
    {
        'email': 'temp2@hotmail.com',
        'first_name': 'John'
    },
]
# Result: ValueError: Missing value for "<CharField: TestAccount.first_name>".
users_2 = [
    {
        'email': 'temp@hotmail.com',
        'first_name': 'John'
    },
    {
        'email': 'temp2@hotmail.com'
    },
]

db.create_tables([TestAccount])

TestAccount.insert_many(users_1).execute()
TestAccount.insert_many(users_2).execute()
```