У меня есть простой класс "Счета" с атрибутом "Число", который должен
быть назначенным приложением, когда пользователь сохраняет счет. Там
Вот некоторые ограничения:
1) приложение (тонкое) клиент-серверное, так что
присваивает номер должен высматривать коллизии
2) Счета также имеют атрибут «версия», поэтому я не могу использовать простой
Автоинкрементное поле уровня СУБД
Я пытаюсь создать это, используя пользовательский тип, который пнул бы в каждом
время, когда счет будет сохранен. Всякий раз, когда process_bind_param вызывается с
значение None, для вызова
номер и избегать столкновений. Это достойное решение?
Во всяком случае, у меня проблема .. Вот мой пользовательский Тип:
class AutoIncrement(types.TypeDecorator):
impl = types.Unicode
def copy(self):
return AutoIncrement()
def process_bind_param(self, value, dialect):
if not value:
# Must find next autoincrement value
value = "1" # Test value :)
return value
Моя проблема сейчас заключается в том, что когда я сохраняю счет-фактуру и автоинкремент
устанавливает "1" в качестве значения для своего номера, экземпляр счета не получает
обновляется с новым номером .. Это ожидается? Я скучаю
что-то?
Большое спасибо за ваше время!
(SQLA 0.5.3 на Python 2.6, используя postgreSQL 8.3)
Редактировать: Майкл Байер сказал мне, что такое поведение ожидается, так как TypeDecorators не работают со значениями по умолчанию.