MyTetra Share
Делитесь знаниями!
AutoIncrement / Создание автоикремента
Время создания: 17.04.2017 21:09
Раздел: Python - Модули - peewee
Запись: xintrea/mytetra_db_mcold/master/base/1492452541hwbu2lz4hw/text.html на raw.githubusercontent.com

### 5. Создание автоикремента / AutoIncrement



class Poet(Model):

id = IntegerField()

c_author = CharField()

def next_id():

# find max value of temp_id in model

# increment it by one and assign it to model instance object

try:

next_value = Poet.select(fn.Max(Poet.id))[0].id + 1

except:

next_value = 1

return next_value


if __name__ == "__main__":

try:

Poet.create_table()

except:

pass

Poet.create(id=next_id(), c_author='Block')

Poet.create(id=next_id(), c_author='Pushkin')



Тоже самое с использованием eval

eval позволяет сделать функцию next_id универсальной, т.е. для любой таблицы



class Poet(Model):

id = IntegerField()

c_author = CharField()

def next_id(instance):

# find max value of temp_id in model

# increment it by one and assign it to model instance object

try:

e = instance.__name__ + '.select(fn.Max(' + instance.__name__ + '.id))[0].id + 1'

# next_value = Poet.select(fn.Max(Poet.id))[0].id + 1

next_value = eval(e)

except:

next_value = 1

return next_value


if __name__ == "__main__":

try:

Poet.create_table()

except:

pass

Poet.create(id=next_id(Poet), c_author='Akhmadulina')

Poet.create(id=next_id(Poet), c_author='Tutchev')


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования