Форум сайта python.su
Доброго времени суток.
Помогите мне реализовать следующее: id начинается с 1000 к примеру, шаг пускай будет 15. Как реализовать?
from database import db class User(db.Model): id = db.Column(db.Integer, db.Sequence('user_seq_id', start=1000, increment=15), primary_key = True)
Офлайн
У меня тоже не отрабатывает. В документации также приводится такой пример.
# a function which counts upwards i = 1000 def mydefault(): global i i += 15 return i t = Table("mytable", meta, Column('id', Integer, primary_key=True, default=mydefault), )
Офлайн
Какая база данных используется?
It only has an effect on databases which have explicit support for sequences, which currently includes Postgresql, Oracle, and Firebird.
Офлайн
alexbadaloffА вот за такое можно и канделябром! Представьте доступ к базе в несколько потоков - первый читает max(id), в это время второй вставляет запись, после этого первый вставляет запись.
Нужно дёргать базу и получать max(id).
Офлайн
PooH
Представьте доступ к базе в несколько потоков - первый читает max(id), в это время второй вставляет запись, после этого первый вставляет запись.
PooH
Какая база данных используется?
It only has an effect on databases which have explicit support for sequences, which currently includes Postgresql, Oracle, and Firebird.
Офлайн
alexbadaloffВот тут описано, НО алхимия и так прекрасно генерит первичный ключ, достаточно
То есть в sqlite это не прокатит.
Вопрос стало быть: как это можно реализовать для sqlite, да ещё с учётом не быть избитым канделябром?
id начинается с 1000 к примеру, шаг пускай будет 15.ИМХО вообще странная хотелка - не стоит навешивать на суррогатный первичный ключ дополнительные значения, его смысл быть идентификатором записи и все, если вводится какой-то дополнительные смысл - нужно дополнительное поле(встречал много разных веселых извращений - отрицательные значения для ключа у импортированных записей, разбиение значения ключа на диапазоны), остальное от лукавого.
Отредактировано PooH (Июль 18, 2014 13:06:23)
Офлайн
Допустим у автора есть чёткая инструкция иметь у записей такие идентификаторы. Допустим он оставит поле id в покое и выведет числа 1000+n*15 в другое поле. Как это прописать?
from database import db class User(db.Model): id = db.Column(db.Integer, primary_key = True) number = db.Column(db.Integer, default=id*15+1000) #как?
Отредактировано alexbadaloff (Июль 18, 2014 14:32:58)
Офлайн