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

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

04.01.2023, 19:52. Показов 519. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,663
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru