shashank
shashank

Reputation: 33

auto increment field in Peewee

Is there a way to define autoincrement Field in peewee.

I understand we could define sequence but the need to create the sequence manually and not managed by create_tables deters me from using it. ( The build process is managed by create tables and I would prefer not to add manual steps )

import peewee
class TestModel(peewee.Model):
    test_id = peewee.BigIntegerField(sequence='test_id_seq')

Alternate to the above code I would rather have. As most databases have serial field I dont see a point maintaining a sequence.

import peewee
class TestModel(peewee.Model):
    test_id = peewee.AutoIncremenetIntField() 

Upvotes: 3

Views: 8784

Answers (2)

Sandrogo
Sandrogo

Reputation: 596

The given answers here are outdated but this was still my first Google search result.

Peewee has a special field type for an auto incrementing primary key called AutoField:

The AutoField is used to identify an auto-incrementing integer primary key. If you do not specify a primary key, Peewee will automatically create an auto-incrementing primary key named “id”.

Take a look at the documentation. Example usage:

class Event(Model):
  event_id = AutoField()  # Event.event_id will be auto-incrementing PK.

Upvotes: 7

MrPandav
MrPandav

Reputation: 1861

Either you can use PrimaryKeyField() as @wyatt mentioned in comment

or you can use Playhouse- Signal Support (peewee extensions)

from playhouse.signals import Model, pre_save

class MyModel(Model):
    data = IntegerField()

@pre_save(sender=MyModel)
def on_save_handler(model_class, instance, created):
    # find max value of temp_id in model
    # increment it by one and assign it to model instance object
    next_value = MyModel.select(fn.Max(MyModel.temp_id))[0].temp_id +1
    instance.temp_id = next_value

Upvotes: 7

Related Questions