Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387

Ключ UNIQUE. Добавление элемента

04.01.2023, 19:52. Показов 538. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет.

Есть поле, помеченное ключом UNIQUE.
При попытке добавить запись со значение поля которое уже есть в базе, я получаю следующую отладочную информацию.
Code
1
2
3
4
5
6
7
8
9
10
RELEASE CONNECTION
GET CONNECTION FROM THE LOCAL POOL
BEGIN IMMEDIATE TRANSACTION
INSERT INTO "clients" ("name") VALUES (?)
['test']
 
ROLLBACK
RELEASE CONNECTION
 
Process finished with exit code -1073740791 (0xC0000409)
Запись не добавляется, как в принципе и ожидалось. Но после этого приложение вылетает.

Собственно вопрос: это нормальное поведение?
Т.е. даже можно спросить шире, это просто защита базы от добавления "дубликата", но подобные ситуации должен отслеживать разработчик в коде при добавлении? Например сначала убедиться, что записи с таким полем нет, а уже после этого добавлять?
Или все же эта ситуация не должна останавливать работу программы?

Работаю через PonyORM. В данный момент "тренируюсь" с SQLite, но в принципе так же интересно как это реализовано в других БД.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2023, 19:52
Ответы с готовыми решениями:

Списки. Инициализация, добавление элемента в начало и после другого элемента. Удаление элемента
uses crt; type list= ^item; item=record data: integer; next:list; end; var l:list; procedure print;

Односвязный список: добавление элемента спереди и добавление/удаление после каждого четного
Мне требовалось написать односвязный список со всеми функциями. Большинство из которых я реализовал. Мне осталось только добавление спереди...

Добавление новой строки в DataTable и первичный ключ
В SQLite при указании первичного ключа у таблице типа INTEGER, тот автоматически становиться автоинкрементируемым, что очень удобно - не...

5
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
04.01.2023, 21:00
Цитата Сообщение от anton78spb Посмотреть сообщение
это нормальное поведение?
Нормальное
Цитата Сообщение от anton78spb Посмотреть сообщение
должен отслеживать разработчик в коде при добавлении?
Несовсем так. Правда ответ на этот вопрос лежит гораздо глубже чем думаете. Всё в вопросах проектирования DB и её использовании

Добавлено через 4 минуты
В вашем случае вы либо проеряете есть ли такая запись, либо просто отлавливаете ошибки
В любом случае, как по мне всё изначально не верно
1
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
04.01.2023, 22:29  [ТС]
brian778, Спасибо за ответ.
Цитата Сообщение от brian778 Посмотреть сообщение
Правда ответ на этот вопрос лежит гораздо глубже чем думаете. Всё в вопросах проектирования DB и её использовании
Если не затруднит, можно чуть более развернуто.
Пример вполне конкретный. Уточню еще раз. Возьмем самый примитивный вариант.
Одна таблица. Два поля, id = PrimaryKey, name = str (unique = True).
Никаких дополнительных связей. Ничего лишнего.
Операция: добавление записи с полем name, значение которого уже есть БД.
Цитата Сообщение от brian778 Посмотреть сообщение
В любом случае, как по мне всё изначально не верно
Что конкретно неверно?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
04.01.2023, 22:32
Лучший ответ Сообщение было отмечено anton78spb как решение

Решение

anton78spb, но ведь если это делать в сиквеле через консоль или гуи-клиент то тоже покажет ошибку, почему удивило что питон бросает исключение? конечно ты должен обработать все -нет бд, не тот пароль, отпала сетка, не верный запрос и так далее.
1
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
04.01.2023, 22:36
Я боюсь тут чтото сказать, так как более квалифицированные люди скажут что я не то сморозил
Но по моему мнению вообще не стоит ставить unique для varchar, а есои уж делаете, то перед добавлением проверяйте есть ли такое
1
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
04.01.2023, 23:09  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
но ведь если это делать в сиквеле через консоль или гуи-клиент то тоже покажет ошибку, почему удивило что питон бросает исключение?
Привет. Мой косяк, я не попробовал сделать такой запрос напрямую через SQL, сразу начал делать через ORM. Не знал что данное действие вызывает ошибку. Предполагал, что это просто "защита" от добавления дубликата.
Цитата Сообщение от Welemir1 Посмотреть сообщение
конечно ты должен обработать все
Теперь буду в курсе.
Цитата Сообщение от brian778 Посмотреть сообщение
Но по моему мнению вообще не стоит ставить unique для varchar
Ну а например e-mail как хранить? Я не эксперт в БД, но осмелюсь предположить, что e-mail хранится в строковом типе.
Цитата Сообщение от brian778 Посмотреть сообщение
а если уж делаете, то перед добавлением проверяйте есть ли такое
Спасибо, уже понял.

Welemir1, brian778, Я думал, что устанавливая ключ UNIQUE, мы просто автоматизируем проверку при добавлении на наличие дубликата. И в случае если такое значение уже есть, то просто получим ответ об этом, а не ошибку.
А это по сути защита самой БД, на случай если разработчик не сделал проверку самостоятельно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2023, 23:09
Помогаю со студенческими работами здесь

Добавление записи в таблицу имеющую внешний ключ
В базе данных (MSSQL Server 2012) есть две таблицы связанные с помощью первичного и внешнего ключа: улицы(primary) и сотрудники(foreigh)....

Динамическое добавление пары ключ/много значений в Dictionary
Здравствуйте! Задача состоит в следующем. Есть большой файл с столбцом А и столбцом Б. Нужно построчно считать файл, записывая пары...

Добавление невозможно, ключ связи таблицы не входит в набор записей
всем привет, помогите разобраться с запросом, см. изображения на картинках сам запрос, результат запроса и схема данных БД мне нужно...

Добавление записи в базу, если в полях автоинкремент и первичный ключ
Здравствуйте! Есть 3 колонки id (первичный ключ и автоинкремент), Model, Value (автоинкремент) Создаю запрос INSERT INTO Modeli...

Двусвязный список. Реализовать перемещение по списку, добавление элемента и удаление элемента
Всем привет. Помогите пожалуйста написать программу,для работы с двусвязным неупорядоченным списоком. Инф. поле целого типа. Реализовать :...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru