Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Март 12, 2007 14:00:02

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

как максимально просто и главное быстро найти не существующее уникальное поле в SQLObject?
ниже написанный код медленный и решает только часть проблемы - n может быть больше 20000 + медленно

n=20000
def NewNumber():
    t=-1
    for x in xrange(1,n+1,1):
        try:
            model.Class1.byNumber(x)
        except model.SQLObjectNotFound, msgs:
            return x
    return t



Офлайн

#2 Март 12, 2007 14:31:09

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

в классе
class Class1(SQLObject)
....
    number = IntCol(alternateID = True)
.....



Офлайн

#3 Март 12, 2007 15:22:25

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

pythonwin
как максимально просто и главное быстро найти не существующее уникальное поле в SQLObject?
А что это за задача такая? Такие задачи ни с SQLObject ни вообще с SQL не решаются. В крайнем случае - пишите процедуру. Или всю выборку получать на клиенте и с ней разбираться.
Самое главное тут понять что пока вы будете искать это “несуществующее уникальное поле” - другой клиент может вставить в БД запись с таким же “несуществующим” значением.



Офлайн

#4 Март 13, 2007 11:23:49

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

подскажите, пожалуйста, как в sqlobject создать свою последовательность (в виде класса) и работать с ней?



Офлайн

#5 Март 13, 2007 12:54:59

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

pythonwin
как максимально просто и главное быстро найти не существующее уникальное поле в SQLObject?
А если подойти к задаче с другой стороны:
1. Загадать случайное число.
2. Проверить есть ли оно в базе.
3. Если есть, то перейти к п.1, если нет, то к п.4
4. Ок.



Отредактировано (Март 13, 2007 12:55:24)

Офлайн

#6 Март 13, 2007 13:20:34

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

можно использовать последовательности - сейчас загвоздка в том как запустить через sqlobject код sql
CREATE SEQUENCE class1_number_seq;
и
SELECT NEXTVAL('class1_id_seq');



Отредактировано (Март 13, 2007 13:20:54)

Офлайн

#7 Март 13, 2007 14:53:13

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

Какая-то высосанная из пальца проблема.
Чем не подходит primary key по имени ‘id’, у которого установлен auto_increment?



Офлайн

#8 Март 14, 2007 07:14:52

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

Mkdir
Чем не подходит primary key по имени ‘id’, у которого установлен auto_increment?
тоже вариант и вполне реализуемо - только при этом нужно будет бороться с sqlobject



Офлайн

#9 Март 14, 2007 11:30:20

Mkdir
Зарегистрирован: 2006-06-30
Сообщения: 211
Репутация: +  0  -
Профиль   Отправить e-mail  

уникальные поля в SQLObject - часть 2

pythonwin
тоже вариант и вполне реализуемо - только при этом нужно будет бороться с sqlobject
Это почему же? Хочешь сказать, что sqlobject не знает что такое id записи таблицы? ;)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version