SQLAlchemy для соединения родительской таблицы с дочерней таблицей, где дочерней таблице нужна информация из другой таблPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 SQLAlchemy для соединения родительской таблицы с дочерней таблицей, где дочерней таблице нужна информация из другой табл

Сообщение Anonymous »

Я создаю приложение FastAPI и пытаюсь объединить несколько таблиц с помощью SQLAlchemy v2 для достижения определенного формата вывода запроса. У меня есть три модели:

Код: Выделить всё

class MaterialReceipt(Base, AuditMixins):
material_receipt_id = Column(Integer, primary_key=True, index=True)
pic = Column(String)
is_visible = Column(Boolean)
material_receipt_lines = relationship("MaterialReceiptLine", backref='material_receipt')

class MaterialReceiptLine(Base, AuditMixins):
material_receipt_line_id = Column(Integer, primary_key=True, index=True)
material_id = Column(Integer, ForeignKey("material.material_id"))
material_receipt_id = Column(Integer, ForeignKey("material_receipt.material_receipt_id"))
quantity = Column(Float)
exp_date = Column(Date)

class Material(Base, AuditMixins):
material_id = Column(Integer, primary_key=True, index=True)
name = Column(String)
sku = Column(String)
location = Column(String)
low_stock_threshold = Column(Float)

Код: Выделить всё

Material Receipt
является родительским, а MaterialReceiptLine – дочерним. MaterialReceiptLine связан с Material через Material_id. Я хочу запросить все поступления материалов, и результаты должны быть в следующем формате:

Код: Выделить всё

[
{
"material_receipt_id": ...,
"pic": ...,
"is_visible": ...
"material_receipt_lines": [
{
"material_receipt_line_id": ...,
"name": ...,
"sku": ...,
"quantity": ...,
"exp_date": ...
}, ...
]
}, ...
]
Я знаю, что для объединения поступления материала и строки поступления материала я могу попробовать следующий код с sqlalchemy:

Код: Выделить всё

        material_receipts = (
(self.db
.query(MaterialReceiptModel)
.join(MaterialReceiptLineModel)
.options(contains_eager(MaterialReceiptModel.lines))
)
.filter(MaterialReceiptModel.is_visible)
.order_by(MaterialReceiptModel.created_at.desc())
.all()
)
Однако я не знаю, как соединить Материал и Строку поступления материала, чтобы добиться требуемого формата вывода. Есть ли способ сделать это?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/788 ... needs-info
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»