Джанго как уникальный вместе в турбогенераторах /sqlalchemy
Этот вопрос по существу состоит из двух частей. 1. У меня есть ситуация, когда мне нужно, чтобы вещи были уникальными, то есть элементы в БД должны быть уникальными друг с другом.
Допустим, у нас есть модель Things ( Rough PseudoCode)
Class ShoppingList( object ):
thing1_id = Column(Integer)
thing2_id = Column(Integer)
Теперь мне нужно, чтобы thing1_id и thing2_id были уникальными вместе, т.е. набор thing1_id и thing2_id должен быть уникальным вместе. Исходя из мира django, я знаю, что вы можете сделать мета-объявление в моделях django unique_together. Но как это сделать в турбогенераторах.
- Также, как мне на самом деле применить unique_together в устаревшей системе.
2 ответа
Что касается первой части вашего вопроса, то, если я правильно понимаю ваш вопрос, я полагаю, что вы говорите о необходимости определения составных первичных ключей. Как указано в http://docs.sqlalchemy.org/en/latest/core/schema.html:
Для нескольких столбцов может быть назначен флаг primary_key=True, который обозначает первичный ключ из нескольких столбцов, известный как составной первичный ключ.
Определение таких отношений в классе с использованием декларативного способа ORM в SQLAlchemy должно быть простым:
class ShoppingList(Base): thing1_id = Column(Integer, primary_key=True) thing2_id = Column(Integer, primary_key=True)
Что касается второй части вашего вопроса, я полагаю, что вы имеете в виду, как можно определить то же отображение SQLAlchemy для существующей устаревшей базы данных. Если это так, вы должны быть в состоянии использовать вышеуказанный подход, просто не создавайте базу данных из определения ORM. Вы также можете использовать классический способ отображения, описанный в: http://docs.sqlalchemy.org/en/rel_0_8/orm/mapper_config.html?highlight=composite%20primary%20key
Вы просто хотите добавить UniqueConstraint
к определению вашей таблицы (использование первичного ключа приведет к аналогичным эффектам, но, тем не менее, с другой семантикой).
Это так просто, как:
Class ShoppingList( object ):
thing1_id = Column(Integer)
thing2_id = Column(Integer)
__table_args__ = (
UniqueConstraint(thing1_id, thing2_id),
)
Смотрите также http://docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html