Я создаю базу данных для хранения экспериментальных параметров для нашей лаборатории, и я делая это с помощью 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 вместе на уровне таблицы, чтобы гарантировать уникальность объединения всех значений имен, появляющихся в обеих этих таблицах.
p>
Причина, по которой я хотел бы это сделать, заключается в том, что все строки в WaveformA передаются в математическую функцию на сервере, а все строки в WaveformB передаются в другую математическую функцию на сервере. , когда эксперимент поставлен в очередь наше оборудование. Помимо столбца имени каждой таблицы, WaveformA и WaveformB обычно имеют разные столбцы, поскольку их функции различны (например, WaveformA может иметь столбец «стандартное отклонение», а не «усиление», тогда как WaveformB имеет «усиление», но не «стандартное отклонение»). ), поэтому имеет смысл разделить сигналы на две таблицы. Однако после прочтения всех строк обеих таблиц, ввода значений столбцов в соответствующую функцию и получения выходных данных каждой функции для каждой таблицы мне нужно объединить результаты для обеих таблиц в один словарь Python с именем столбца значения в качестве ключей, а выходные данные этих функций в качестве соответствующих значений. Это входной словарь Python, который требуется оборудованию, и, очевидно, все ключи должны быть уникальными, отсюда и необходимость уникальности столбца имени между несколькими таблицами.
Наложить уникальность тривиально. для столбца в одной таблице (параметр unique=True в экземплярах поля). Я также пробовал изучить UniqueConstraint и добавить его к _table_args_ каждой формы сигнала, но это оказалось полезным только при создании ограничений уникальности между несколькими столбцами в одной таблице, а не между столбцами между таблицами.
Сам Python вернет ошибку в моей функции компиляции, которая создает вышеупомянутый словарь, поэтому эту ошибку нельзя будет пропустить. Но я хотел бы наложить такое ограничение, чтобы любой пользователь в нашей лаборатории случайно не дублировал имя, присвоенное существующей строке сигнала (чтобы обеспечить целостность нашей базы данных).
Я не уверен, что такие ограничения возможны даже в самом SQL, поэтому буду признателен за любую помощь!
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-in-sqlmo
Мобильная версия