【发布时间】:2011-12-05 23:35:42
【问题描述】:
我用 sqlalchemy 创建了一个多对多的关系,如下所示:
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')
之后我创建了如下测试:
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()
而且效果很好。但我真正想要的是存储多个具有相同 group 值的主题,所以我尝试了以下测试:
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()
但它不起作用。
这可以使用 sqlalchemy 完成吗?
提前致谢
【问题讨论】:
-
我认为您拥有的模型在数据库级别上表现得很好。但是按照您的意愿使用的简单方法......我不确定开箱即用的解决方案,但您可以尝试实现自己的自定义集合(请参阅sqlalchemy.org/docs/orm/…)
标签: python orm sqlalchemy pyramid