Я использовал SQLAlchemy для создания базы данных SQLite, в которой хранятся библиографические данные какого-либо документа, и я хочу запросить номер автора каждого документа.
Я знаю, как это сделать в сыром SQL, но как я могу достичь того же результата, используя SQLAlchemy? Это возможно без использования join
?
Вот классы, которые я определил:
class WosDocument(Base):
__tablename__ = 'wos_document'
document_id = Column(Integer, primary_key=True)
unique_id = Column(String, unique=True)
......
authors = relationship('WosAuthor', back_populates='document')
class WosAuthor(Base):
__tablename__ = 'wos_author'
author_id = Column(Integer, primary_key=True, autoincrement=True)
document_unique_id = Column(String, ForeignKey('wos_document.unique_id'))
document = relationship('WosDocument', back_populates='authors')
last_name = Column(String)
first_name = Column(String)
И моя цель - получить тот же результат, что и этот SQL-запрос:
SELECT a.unique_id, COUNT(*)
FROM wos_document AS a
LEFT JOIN wos_author AS b
ON a.unique_id = b.document_unique_id
GROUP BY a.unique_id
Я попробовал коды ниже:
session.query(WosDocument.unique_id, len(WosDocument.authors)).all()
session.query(WosDocument.unique_id, func.count(WosDocument.authors)).all()
Первая строка вызвала ошибку, вторая строка не дает мне желаемого результата, она возвращает только одну строку, и я не узнаю, что это такое:
[('000275510800023', 40685268)]
Поскольку WosDocument
Объект имеет отношение один ко многим authors
, я предположил, что могу запросить номер автора каждого документа без явного использования join
, но я не могу выяснить, как это сделать с помощью SQLAlchemy.
Вы можете мне помочь? Спасибо!