我有以下数据:
CREATE TABLE `groups` (
`bookID` INT NOT NULL,
`groupID` INT NOT NULL,
PRIMARY KEY(`bookID`),
KEY( `groupID`)
);
和一个基本上有书籍(bookID,名称,......)但没有groupID的书桌。我无法确定插入图书时groupID的内容。
我想在sqlalchemy中这样做。因此,我尝试将Book映射到book.bookID = groups.bookID。
上与组连接的书籍我做了以下事情:
tb_groups = Table( 'groups', metadata,
Column('bookID', Integer, ForeignKey('books.bookID'), primary_key=True ),
Column('groupID', Integer),
)
tb_books = Table( 'books', metadata,
Column('bookID', Integer, primary_key=True),
tb_joinedBookGroup = sql.join( tb_books, tb_groups, \
tb_books.c.bookID == tb_groups.c.bookID)
并定义了以下映射器:
mapper( Group, tb_groups, properties={
'books': relation(Book, backref='group')
})
mapper( Book, tb_joinedBookGroup )
...
但是,当我执行这段代码时,我意识到每个书籍对象都有一个字段组,这是一个列表,每个组对象都有书籍字段,这是一个单一的分配。我认为我的定义必定会导致sqlalchemy对多对一与一对多的关系感到困惑。
有人可以帮我解决这个问题吗?
我希望的目标是:
g.books = [b, b, b, .. ]
book.group = g
其中g是group的实例,b是book的实例。
答案 0 :(得分:0)
将userlist=False
传递给relation()
,表示该属性应代表标量值,而非集合。这将独立于是否存在此列的主键,但您可能还是想要定义唯一约束。