2010-04-12 4 views
0

많은 한 나는 다음과 같은 데이터가 있습니다SQLAlchemy의 많은 대 한

CREATE TABLE `groups` (  
    `bookID` INT NOT NULL, 
    `groupID` INT NOT NULL, 

    PRIMARY KEY(`bookID`), 
    KEY(`groupID`) 
); 

기본적으로 책 (bookID로서, 이름, ...)이 책 테이블,하지만 그룹 ID없이합니다. 책을 삽입 할 때 groupID가 무엇인지 결정할 방법이 없습니다.

나는 이것을 sqlalchemy에서 원한다. 그래서 나는 book.bookID = groups.bookID에 그룹들과 합쳐진 책들로 Book을 매핑하려고 시도했다.

나는 다음과 같은 제작 :

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) 

...

그러나, 나는이 코드 조각을 실행할 때, 나는 각각의 실현을 book 객체는 목록 인 필드 그룹을 가지며 각 그룹 객체는 단 하나의 assigment 인 books 필드를 갖습니다. 나는 여기서 나의 정의가 sqlalchemy가 many-to-one 대 one-to-many 관계에 대해 혼란을 야기 시켰음에 틀림 없다고 생각한다.

누군가이를 해결할 수 있습니까?

내 원하는 목표는 :

g.books = [b, b, b, .. ] 
book.group = g 
g 그룹의 인스턴스입니다

, b는 책의 인스턴스입니다.

+0

또한 tb_groups.bookID가 기본 키가 아닌 경우이 문제를 해결할 수있는 방법이 있습니까? – crapbag

답변

0

userlist=False에서 relation()을 전달하면 속성은 컬렉션이 아니라 스칼라 값을 나타내야합니다. 이것은이 열에 대한 기본 키가 있는지 여부에 대해 독립적이지만, 어쨌든 고유 제한 조건을 정의하려고합니다.