python - Sqlalchemy many to many mapping with extra fields -


i created many many relationship sqlalchemy this:

subject_books = table('subject_books', base.metadata,     column('subject_id', integer, foreignkey('subjects.id')),     column('book_id', integer, foreignkey('books.id')),     column('group', integer) )  class subject(base):     __tablename__ = 'subjects'     id = column(integer, primary_key=true)     value = column(unicode(255), unique=true)  class book(base):     __tablename__ = 'books'     id =  column(integer, primary_key=true)     title = column(unicode(255))     isbn = column(unicode(24))     subjects = relationship('subject', secondary=subject_books, collection_class=attribute_mapped_collection('group'), backref='books') 

after created test following:

book = book(title='first book',isbn='test') book.subjects[0] = subject(value='first subject') book.subjects[1] = subject(value='second subject')  session.add(book) transaction.commit() 

and works fine. want store more 1 subject same group value, tried following test:

book = book(title='first book',isbn='test') book.subjects[0] = [subject(value='first subject'),subject(value='second subject')] book.subjects[1] = [subject(value='third subject'),subject(value='forth subject')]  session.add(book) transaction.commit() 

but not work.

can done using sqlalchemy?

thanks in advance

razi

i think constructing wrong relation ship.

your relation ship must be

book m2m subject

subject m2m group

so have create 1 more model group , must assign m2m in subject

your models like.

subject_books = table('subject_books', base.metadata,     column('subject_id', integer, foreignkey('subjects.id')),     column('book_id', integer, foreignkey('books.id')),         ) subject_group = table('subject_groups', base.metadata,     column('group_id', integer, foreignkey('groups.id')),     column('subject_id', integer, foreignkey('subjects.id')), )  class subject(base):     __tablename__ = 'subjects'     id = column(integer, primary_key=true)     value = column(unicode(255), unique=true)     groups = relationship('groups', secondary=subject_groups, backref='subjects')  class groups(base):     __tablename__ = 'groups'     id = column(integer, primary_key=true)     name = column(unicode(255), unique=true)  class book(base):     __tablename__ = 'books'     id =  column(integer, primary_key=true)     title = column(unicode(255))     isbn = column(unicode(24))     subjects = relationship('subject', secondary=subject_books, backref='books') 

i check docs attribute_mapped_collection. each time found each key associated 1 object not more one. if read anywhere please provide link can check how fit in code.

i think you.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -