2013-04-13 2 views
0

Этот вопрос по существу две части. 1. У меня есть ситуация, когда требуется, чтобы вещи были уникальными вместе. Элементы в db должны быть уникальными вместе друг с другом.Django подобный уникальный вместе в turbogears/sqlalchemy

Допустим, у нас есть модели вещей (Грубый псевдокод)

Class ShoppingList(object): 
    thing1_id = Column(Integer) 
    thing2_id = Column(Integer) 

Теперь мне нужно thing1_id и thing2_id быть уникальным вместе, то есть множество thing1_id и thing2_id должен быть уникальным вместе. Исходя из мира django, я знаю, что вы можете сделать мета-объявление в моделях django unique_together. Но как это можно сделать в турбогерах.

  1. Также как я могу применить unique_together к устаревшей системе.

ответ

1
  1. Для первой части вашего вопроса, если я правильно понимаю ваш вопрос, я полагаю, вы говорите о необходимости определения составных первичных ключей. Как указаны в http://docs.sqlalchemy.org/en/latest/core/schema.html#describing-databases-with-metadata:

    Несколько столбцы могут быть назначены primary_key = True флага, который обозначает несколько столбцы первичный ключ, известный как составной первичный ключ.

    Определение такого отношения на классе с использованием декларативно ОРМ в SQLAlchemy, должны быть столь же просто, как:

    class ShoppingList(Base): 
        thing1_id = Column(Integer, primary_key=True) 
        thing2_id = Column(Integer, primary_key=True) 
    
  2. Что касается второй части вашего вопроса, я полагаю, вы имеете в виду, как один будет определять одно и то же сопоставление SQLAlchemy для существующей устаревшей базы данных. Если это так, вы должны иметь возможность использовать вышеуказанный подход, только не создавать базу данных из определения ORM. Вы также можете использовать классическое отображение способа, описанные в: http://docs.sqlalchemy.org/en/rel_0_8/orm/mapper_config.html?highlight=composite%20primary%20key#classical-mappings

2

Вы просто хотите добавить UniqueConstraint к вашему определению таблицы (с использованием первичного ключа будет achive подобных эффектов, но с другой семантикой, тем не менее).

Это так просто, как:

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#table-configuration

Смежные вопросы