2016-05-09 3 views
2

Есть ли способ определить autoincrement Поле в peewee.auto increment field in Peewee

Я понимаю, что мы могли бы определить последовательность, но необходимость создания последовательности вручную и не управляемая create_tables не позволяет мне использовать ее. (Процесс сборки управляется создавать таблицы, и я предпочел бы не добавлять действия вручную)

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

Alternate в коде выше я предпочел бы иметь. Поскольку у большинства баз данных есть последовательное поле, я не вижу точки, поддерживающей последовательность.

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

Peewee автоматически добавляет поле автоинкремента «ID», если другой первичный ключ не определен , Есть ли причина, по которой это не работает для вас? –

ответ

2

Либо вы можете использовать PrimaryKeyField(), как @wyatt упоминались в комментариях

или вы можете использовать Playhouse- Signal Support (peewee extensions)

from playhouse.signals import Model, post_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