Найти - Пользователи
Полная версия: Flask-SQLAlchemy, Sequence
Начало » Web » Flask-SQLAlchemy, Sequence
1
dreamer-s
Доброго времени суток.
Помогите мне реализовать следующее: 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)
Этот код не хочет обрабатываться… Или я вовсе не понял, как он должен работать)))
alexbadaloff
У меня тоже не отрабатывает. В документации также приводится такой пример.

# 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),
)

Он отрабатывает, но i нельзя жестко присваивать числу. После перезапуска выполнения, пойдет опять с 1000. Нужно дёргать базу и получать max(id).
PooH
Какая база данных используется?
It only has an effect on databases which have explicit support for sequences, which currently includes Postgresql, Oracle, and Firebird.
PooH
alexbadaloff
Нужно дёргать базу и получать max(id).
А вот за такое можно и канделябром! Представьте доступ к базе в несколько потоков - первый читает max(id), в это время второй вставляет запись, после этого первый вставляет запись.
alexbadaloff
PooH
Представьте доступ к базе в несколько потоков - первый читает max(id), в это время второй вставляет запись, после этого первый вставляет запись.

Согласен. Не подумал.

PooH
Какая база данных используется?
It only has an effect on databases which have explicit support for sequences, which currently includes Postgresql, Oracle, and Firebird.

То есть в sqlite это не прокатит.
Вопрос стало быть: как это можно реализовать для sqlite, да ещё с учётом не быть избитым канделябром?

PooH
alexbadaloff
То есть в sqlite это не прокатит.
Вопрос стало быть: как это можно реализовать для sqlite, да ещё с учётом не быть избитым канделябром?
Вот тут описано, НО алхимия и так прекрасно генерит первичный ключ, достаточно
id = Column(Integer, primary_key=True)

а вот это
id начинается с 1000 к примеру, шаг пускай будет 15.
ИМХО вообще странная хотелка - не стоит навешивать на суррогатный первичный ключ дополнительные значения, его смысл быть идентификатором записи и все, если вводится какой-то дополнительные смысл - нужно дополнительное поле(встречал много разных веселых извращений - отрицательные значения для ключа у импортированных записей, разбиение значения ключа на диапазоны), остальное от лукавого.
alexbadaloff
Допустим у автора есть чёткая инструкция иметь у записей такие идентификаторы. Допустим он оставит поле 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) #как?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB