Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2014 12:22:54

dreamer-s
Зарегистрирован: 2012-08-13
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

Доброго времени суток.
Помогите мне реализовать следующее: 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)
Этот код не хочет обрабатываться… Или я вовсе не понял, как он должен работать)))

Офлайн

#2 Июль 16, 2014 20:03:34

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

У меня тоже не отрабатывает. В документации также приводится такой пример.

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



————————–
Истина где-то рядом

Офлайн

#3 Июль 18, 2014 08:17:15

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

Какая база данных используется?

It only has an effect on databases which have explicit support for sequences, which currently includes Postgresql, Oracle, and Firebird.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Июль 18, 2014 08:19:16

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

alexbadaloff
Нужно дёргать базу и получать max(id).
А вот за такое можно и канделябром! Представьте доступ к базе в несколько потоков - первый читает max(id), в это время второй вставляет запись, после этого первый вставляет запись.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Июль 18, 2014 12:49:31

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

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, да ещё с учётом не быть избитым канделябром?



————————–
Истина где-то рядом

Офлайн

#6 Июль 18, 2014 13:02:44

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

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

а вот это
id начинается с 1000 к примеру, шаг пускай будет 15.
ИМХО вообще странная хотелка - не стоит навешивать на суррогатный первичный ключ дополнительные значения, его смысл быть идентификатором записи и все, если вводится какой-то дополнительные смысл - нужно дополнительное поле(встречал много разных веселых извращений - отрицательные значения для ключа у импортированных записей, разбиение значения ключа на диапазоны), остальное от лукавого.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Июль 18, 2014 13:06:23)

Офлайн

#7 Июль 18, 2014 14:32:25

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy, Sequence

Допустим у автора есть чёткая инструкция иметь у записей такие идентификаторы. Допустим он оставит поле 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version