这个问题基本上分为两部分。 1.我有一种情况,我要求事物是唯一的,即db中的元素需要彼此独特。
让我们说我们有一个模型的东西(粗糙的伪代码)
Class ShoppingList( object ):
thing1_id = Column(Integer)
thing2_id = Column(Integer)
现在我需要将thing1_id和thing2_id组合在一起,即thing1_id和thing2_id的集合需要是唯一的。来自django世界我知道你可以在unique_together的django模型中做一个元声明。但是如何在涡轮增压器中做到这一点。
答案 0 :(得分:4)
您只是想在表定义中添加UniqueConstraint
(使用主键会产生类似的效果,但仍然会有不同的语义)。
这很简单:
Class ShoppingList( object ):
thing1_id = Column(Integer)
thing2_id = Column(Integer)
__table_args__ = (
UniqueConstraint('thing1_id', 'thing2_id'),
)
答案 1 :(得分:1)
对于问题的第一部分,如果我正确理解您的问题,我相信您正在讨论定义复合主键的必要性。如http://docs.sqlalchemy.org/en/latest/core/schema.html#describing-databases-with-metadata中所述:
可以为多列分配primary_key = True标志,该标志表示多列主键,称为复合主键。
使用SQLAlchemy中的声明性ORM方法在类上定义这样的关系应该简单如下:
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#classical-mappings