flashi4
Фев. 4, 2008 14:17:37
моя модель:
import sqlalchemy
from sqlalchemy import *
from sqlalchemy.ext.assignmapper import assign_mapper
from sqlalchemy.ext.sessioncontext import SessionContext
from pylons.database import session_context as ctx
meta = MetaData()
records_table = Table('records', meta,
Column('id', Integer,primary_key=True),
Column('user', String(40)),
Column('password', String(40)),
)
class Record(object):
def __str__(self):
return self.title
record_mapper = assign_mapper(ctx, Record, records_table)
Вопрос:
Как сделать, чтобы не было дубликатов user в записях?
Пример:
+—-+——+———-+
| id | user |password|
+—-+——+———-+
| 1 | 123 | 123 |
| 2 | 123 | 321 |
+—-+——+———-+
ods
Фев. 4, 2008 15:13:30
Для начала сделай:
Column('user', String(40), unique=True),
Дубликатов после этого не будет и можно будет подумать о том, как и когда ты на них собираешься реагировать.
flashi4
Фев. 4, 2008 15:30:12
ods
Для начала сделай:
Column('user', String(40), unique=True),
Дубликатов после этого не будет и можно будет подумать о том, как и когда ты на них собираешься реагировать.
спасибо ))
Переход при повторе user было бы неплохо еще)
Примерно на сообщение : такой пользователь уже существует))
Пишу всего месяц на пилонах и еще нифига не понимаю.
ods
Фев. 4, 2008 15:39:20
flashi4
Переход при повторе user было бы неплохо еще)
Примерно на сообщение : такой пользователь уже существует))
Пишу всего месяц на пилонах и еще нифига не понимаю.
Вариантов 2, по которым можно определить попытку добавления дубликата:
1) Ловить IntegrityError. Мне этот вариант не нравится тем, что по мере усложнения могут появиться другие причины для этого исключения.
2) Перед добавлением пользователя в транзакции делать выборку из базы с установкой блокировки.
Это принципы работы с реляционной СУБД вообще и через SQLAlchemy в частности. Про Pylons ничего сказать не могу. Возможно, там уже есть что-то готовое для твоей задачи.
flashi4
Фев. 5, 2008 12:15:11
while True:
try:
user = user(raw_input(“Please enter an user: ”))
break
except SQLError:
print “Oops! Enter an other name…”
вот этот блок правилен?