0
,我有以下数据:SQLAlchemy的,一对多VS多对一
CREATE TABLE `groups` (
`bookID` INT NOT NULL,
`groupID` INT NOT NULL,
PRIMARY KEY(`bookID`),
KEY(`groupID`)
);
和主要有书籍(BOOKID,姓名,...)一书表,但没有组ID。在插入书籍时,我无法确定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是组的实例,并且b是书的一个实例。
另外,如果tb_groups.bookID不是主键,有没有办法解决这个问题? – crapbag 2010-04-12 09:58:23