从多对多关系表中查询并从相关模型 sqlalchemy 中获取特定字段

问题描述 投票:0回答:0

比如我有这个数据库方案,多对多的关系:

Base = declarative_base()

class AuthorBook(Base):
    __tablename__ = 'author_book'
    id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("uuid_generate_v4()"))
    author_id = Column(UUID(as_uuid=True), ForeignKey("author.id"))
    book_id = Column(UUID(as_uuid=True), ForeignKey("book.id"))
    extra_data = Column(String(50))

class Book(Base):
    __tablename__ = 'book'
    id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("uuid_generate_v4()"))
    title = Column(String(50), nullable=False)
    pub_date = Column(TIMESTAMP, nullable=False)

class Author(Base):
    __tablename__ = 'author'
    id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("uuid_generate_v4()"))
    name = Column(String(50), nullable = False)

例如,我有几本书和几个作者(重要的是要知道不是所有的书都链接到作者,也不是所有的作者都链接到书)

现在如果我想查询并获取与作者关联的所有图书 ID,我将执行以下操作:

[str(value) for value, in session.query(distinct(AuthorBook.book_id)).all()]

问题是(这是我的问题),如果我想查询并带来与作者相关的所有书籍但只有他们的标题,我该怎么做?考虑到复杂性和效率,最好的方法是什么? 例如我想做以下事情:

[value for value, in session.query(distinct(AuthorBook.book_title)).all()]

但是我不能,因为 AuthorBook 模型中没有这样的字段(book_title)(当然我不想复制这个字段) 我也考虑过关系,但是在这种情况下,我进行的每个查询都会将关系字段与结果一起带来,并且考虑到我在上述模型中有很多数据,它非常沉重(我不想每次查询 AuthorBook 模型时都带上所有书籍对象)。

任何想法?解决这个问题的最佳方法是什么?

python python-3.x sqlalchemy many-to-many relationship
© www.soinside.com 2019 - 2024. All rights reserved.