2016-05-09 9 views
2

Gibt es eine Möglichkeit, Autoincrement Field in peewee zu definieren.Auto-Inkrement-Feld in Peewee

Ich verstehe, dass wir Sequenz definieren können, aber die Notwendigkeit, die Sequenz manuell zu erstellen und nicht von create_tables verwaltet, verhindert, dass ich sie benutze. (Der Build-Prozess wird von Tabellen erstellen, und ich würde es vorziehen, nicht manuelle Schritte hinzufügen)

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

Alternative zu dem obigen Code würde ich lieber. Da die meisten Datenbanken ein serielles Feld haben, sehe ich keinen Punkt, der eine Sequenz verwaltet.

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

Peewee automatisch fügt ein selbstinkrementierende „id“ Feld, wenn ein anderer Primärschlüssel nicht angegeben . Gibt es einen Grund, dass das bei dir nicht funktioniert? –

Antwort

2

Entweder können Sie PrimaryKeyField() als @wyatt in Kommentar erwähnt verwenden

oder können Sie verwenden 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 
Verwandte Themen