У меня есть следующие данные:
CREATE TABLE `groups` (
`bookID` INT NOT NULL,
`groupID` INT NOT NULL,
PRIMARY KEY(`bookID`),
KEY( `groupID`)
);
и таблица книг, в которой в основном есть книги (bookID, name, ...), но БЕЗ 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 - это экземпляр группы, а b - это экземпляр книги.