Наложение ограничения уникальности значений столбцов между несколькими таблицами в SQLModelPython

Программы на Python
Ответить
Anonymous
 Наложение ограничения уникальности значений столбцов между несколькими таблицами в SQLModel

Сообщение Anonymous »

Извиняюсь, если на этот вопрос был дан ответ в другом месте: мне не повезло при поиске. Я также новичок в SQL, поэтому надеюсь, что ответ на мой вопрос не слишком элементарен.
Я создаю базу данных для хранения экспериментальных параметров для нашей лаборатории, и я делая это с помощью SQLModel. В простом примере моего вопроса у меня есть две таблицы: WaveformA и WaveformB:

Код: Выделить всё

from sqlmodel import Field, SQLModel

#from sqlmodel import  Column, Relationship, CheckConstraint, Integer, UniqueConstraint
# from sqlalchemy.ext.hybrid import hybrid_property

class WaveformA(SQLModel, table=True):
__tablename__ = "waveforms_a"

id: int = Field(
primary_key=True,
)
name: str = Field(
unique=True,
description="Unique name to identify a waveform of type A"
)
# other columns particular to waveforms of type A, that may not be present in Waveform B

def __repr__(self):
return f"Waveform A with id {self.id} and name {self.name}"

class WaveformB(SQLModel, table=True):
__tablename__ = "waveforms_b"

id: int = Field(
primary_key=True,
)
name: str = Field(
unique=True,
description="Unique name to identify a waveform of type B"
)
# other columns particular to waveforms of type B, that may not be present in Waveform A

def __repr__(self):
return f"Waveform B with id {self.id} and name {self.name}"
Я хотел бы наложить ограничение на WaveformA и WaveformB вместе на уровне таблицы, чтобы гарантировать уникальность объединения всех значений имен, появляющихся в обеих этих таблицах.
Я хотел бы наложить ограничение на WaveformA и WaveformB вместе, на уровне таблицы.
Я хотел бы наложить ограничение на WaveformA и WaveformB вместе на уровне таблицы, чтобы гарантировать уникальность объединения всех значений имен, появляющихся в обеих этих таблицах.
p>
Причина, по которой я хотел бы это сделать, заключается в том, что все строки в WaveformA передаются в математическую функцию на сервере, а все строки в WaveformB передаются в другую математическую функцию на сервере. , когда эксперимент поставлен в очередь наше оборудование. Помимо столбца имени каждой таблицы, WaveformA и WaveformB обычно имеют разные столбцы, поскольку их функции различны (например, WaveformA может иметь столбец «стандартное отклонение», а не «усиление», тогда как WaveformB имеет «усиление», но не «стандартное отклонение»). ), поэтому имеет смысл разделить сигналы на две таблицы. Однако после прочтения всех строк обеих таблиц, ввода значений столбцов в соответствующую функцию и получения выходных данных каждой функции для каждой таблицы мне нужно объединить результаты для обеих таблиц в один словарь Python с именем столбца значения в качестве ключей, а выходные данные этих функций в качестве соответствующих значений. Это входной словарь Python, который требуется оборудованию, и, очевидно, все ключи должны быть уникальными, отсюда и необходимость уникальности столбца имени между несколькими таблицами.
Наложить уникальность тривиально. для столбца в одной таблице (параметр unique=True в экземплярах поля). Я также пробовал изучить UniqueConstraint и добавить его к _table_args_ каждой формы сигнала, но это оказалось полезным только при создании ограничений уникальности между несколькими столбцами в одной таблице, а не между столбцами между таблицами.
Сам Python вернет ошибку в моей функции компиляции, которая создает вышеупомянутый словарь, поэтому эту ошибку нельзя будет пропустить. Но я хотел бы наложить такое ограничение, чтобы любой пользователь в нашей лаборатории случайно не дублировал имя, присвоенное существующей строке сигнала (чтобы обеспечить целостность нашей базы данных).
Я не уверен, что такие ограничения возможны даже в самом SQL, поэтому буду признателен за любую помощь!


Подробнее здесь: https://stackoverflow.com/questions/793 ... s-in-sqlmo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»