Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569

Проверка уникальности значений по составу для некоторого набора столбцов перед вставкой

16.12.2023, 21:51. Показов 1621. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть таблица, которая имеет несколько связей с другими таблицами. Перед вставкой требуется проверить на уровне базы данных, чтобы не было лишних записей с теми же значениями в некотором наборе столбцов (у меня это A, B) но из-за динамики их может быть больше, ну хоть и не 20, но и не 3:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sqlalchemy import (
    ARRAY, Boolean, Column, DateTime, CheckConstraint, Enum, ForeignKey, ForeignKeyConstraint, Integer, JSON, MetaData, String, 
    UniqueConstraint, Table
)
 
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
 
Base = declarative_base()
 
 
class Info(Base):
    __tablename__ = "Info"
    A = Column(ForeignKey("Profile.id"), primary_key=True)
    B = relationship(ForeignKey("Profile.id"), primary_key=True)
    __table_args__ = (
        CheckConstraint(A != B, name="not_the_same"),
    )
Можно ли это вообще сделать в sql alchemy?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2023, 21:51
Ответы с готовыми решениями:

Проверка уникальности значений в таблице перед ставкой данных из Excel
Необходимо перед ставкой значений в таблицу MS Access проверить наличие строк по значению из файла Excel. Перед выполнением строки 24...

Проверка уникальности 2х столбцов в процедуре
1)существует строка целиком->ошибка 2)существует 1 параметр в одной строке, а второй параметр в другой строке ->ошибка 3) существует...

Проверка файла перед вставкой в Richtext-поле
Доброго времени суток! Значит есть такая задачка... на форме есть два RichText-поля (SFile и SSample). в SFile будет вставляться файл...

4
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
17.12.2023, 21:16
Приведите примеры таблиц и данных
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
18.12.2023, 01:15  [ТС]
Ну вот, я как раз и привёл в коде простейший пример таблицы Info с двумя столбцами: (A, B). Там, конечно, опечатка, не relationship, а Column используется в определении столбца "B".

Хочется добиться, чтобы не было одинакового состава значений для записей.

То есть, если в Info уже есть такая запись: (A=1, B=2) то больше не должно быть записей с таким же составом значений. То есть ни (A=1, B=2), ни (A=2, B=1) быть не должно. Но и A "не равно" B - тоже, но это ограничение легко реализуется через CheckConstraint. Я правда, не знаю, это на уровне баз данных или как?

Добавлено через 2 минуты
Я вообще смотрю в сторону триггеров, но как они работают в sql alchemy для orm объектов совершенно меня смущает.
0
Заклинатель змей
 Аватар для DobroAlex
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,605
18.12.2023, 16:31
Alex_py, Alex_py, это как-то мудрёно звучит. Это попытка реализации many to many? Не совсем понятно, зачем хранить одинаковые сущности с пересекающимися данными в разных таблицах
0
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
18.12.2023, 21:08  [ТС]
Цитата Сообщение от DobroAlex Посмотреть сообщение
Это попытка реализации many to many?
Вообще, да, это решение подходит, когда я хочу избежать создания дублирования связи m-m на уровне базы данных, но и когда таблица ссылается на несколько других таблиц (хотя, это необязательно, что в качестве типов - внешние ключи на другие таблицы). Просто, можно допустить, что нужна такая уникальность по составу значений для набора из каких-то полей, ну двух или трёх, может больше. На мой взгляд, это ограничение ведь может чаще применяться чем кажется.

Цитата Сообщение от DobroAlex Посмотреть сообщение
Не совсем понятно, зачем хранить одинаковые сущности с пересекающимися данными в разных таблицах
Ну модели просто разные на разные по типу документы, в каждой свои уникальные поля и к тому же необязательными могут быть (здесь ещё предстоит поработать над нормализацией, но мне почему-то кажется, что придётся "на лету" при загрузке данных эти таблицы создавать, именно ту часть, которая содержит те поля, на которые нужно ограничение, про которое я описал).

Если есть из коробки sql alchemy такое ограничение и в коде можно задать, что-то вроде:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sqlalchemy import UniqueConstraintByValuesConsisting
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
 
class Info(Base):
    __tablename__ = "Info"
    A = Column(ForeignKey("Profile.id"), primary_key=True)
    B = Column(ForeignKey("Profile.id"), primary_key=True)
    #...
    __table_args__ = (
        CheckConstraint(A != B, name="not_the_same"),
        UniqueConstraintByValuesConsisting(A, B, ...)
    )
Ну если нет, придётся триггеры писать. Хотя, я ещё не до конца с ними в sql alchemy подружился.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2023, 21:08
Помогаю со студенческими работами здесь

Проверка уникальности значений вводимых данных в DBEdit (Paradox)
Поле в которое вводится значение (порядковый номер) ключевое, т.е. если я введу номер (значение), которое уже существует, то оно конечно...

Проверка уникальности для софта!
Подскажите какой-то бесплатный сервис для проверки уникальности веб-сайтов, в который можно вбить адресс сайта и он будет его проверять на...

Проверка значений перед вводом
Доброго времени суток. В программе выполняется следующий запрос к бд SqlCommand Null = new SqlCommand("select Регион from...

Проверка значений в таблице перед записью
Подскажите пожалуйста как правильно написать процедуру проверки значений в таблице, нужно что если заданные введённые поля уже есть и...

Проверка на наличие двух значений перед занесением в БД
Здравствуйте. Хочу внести 2 значения в БД, но перед этим проверить, есть ли они уже там. Как будет выглядеть запрос? Уточню: если одно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
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. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru