比如我有这个数据库方案,多对多的关系:
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 模型时都带上所有书籍对象)。
任何想法?解决这个问题的最佳方法是什么?