Получить столбец "имя" с 2 иностранными ключами из одной таблицы - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть таблица «ITEM_110» с двумя внешними ключами для таблицы «AXIS».

Я хочу изменить свою функцию «get_item_110 ()», чтобы получить «name_axis», соответствующее «ITEM_110.id_axis» и «name_axis» соответствует «ITEM_110.id_axis_tool».

from appli.app import Base, session
from sqlalchemy import Column, Integer, String, ForeignKey, Float
from sqlalchemy.orm import relationship
from ..models import machine, axis, position_y, position_x, area, tool

#The item 110 of AMAT300
class ITEM_110(Base):
    __tablename__ = 'Item_110'
    id_machine                  = Column(Integer, ForeignKey("Machine.id_machine"), nullable=False, primary_key=True)
    id_axis                     = Column(Integer, ForeignKey("Axis.id_axis"), nullable=False, primary_key=True)
    id_area                     = Column(Integer, ForeignKey("Area.id_area"), nullable=False, primary_key=True)
    id_position_x               = Column(Integer, ForeignKey("Position_X.id_position_x"), nullable=False, primary_key=True)
    id_position_y               = Column(Integer, ForeignKey("Position_Y.id_position_y"), nullable=False, primary_key=True)
    id_axis_tool                = Column(Integer, ForeignKey("Axis.id_axis"), nullable=False, primary_key=True)
    id_tool                     = Column(Integer, ForeignKey("Tool.id_tool"), nullable=False, primary_key=True)
    static_jitter_max           = Column(Float(precision = 32), nullable=False)
    static_jitter_min           = Column(Float(precision = 32), nullable=False)
    static_jitter_moy           = Column(Float(precision = 32), nullable=False)
    static_jitter_ecart_type    = Column(Float(precision = 32), nullable=False)

def get_item_110(filters, sort):
    """
    param: -filters (dictionnary), allow to filter data
           -sort (list), a list with the name of column on which we want to sort

    get all data according with filters and sort
    """
    item_110 = session.query(ITEM_110.id_machine, ITEM_110.id_axis, ITEM_110.id_position_x, ITEM_110.id_position_y, ITEM_110.id_area, ITEM_110.id_axis_tool, ITEM_110.id_tool, \
    ITEM_110.static_jitter_max, ITEM_110.static_jitter_min, ITEM_110.static_jitter_moy, ITEM_110.static_jitter_ecart_type, machine.MACHINE.number_machine, \
    position_y.POSITIONY.position_y, position_x.POSITIONX.position_x, area.AREA.name_area)\
    .filter_by(**filters).order_by(*sort).join(axis.AXIS, ITEM_110.id_axis == axis.AXIS.id_axis).join(axis.AXIS, ITEM_110.id_axis_tool == axis.AXIS.id_axis) \
    .join(machine.MACHINE).join(position_y.POSITIONY).join(position_x.POSITIONX).join(area.AREA).join(tool.TOOL)
    return item_110
from appli.app import Base, session
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint

#The axis on which the tests are executed
class AXIS(Base):
    __tablename__ = 'Axis'
    id_axis        = Column(Integer, primary_key = True)
    name_axis      = Column(String(10), nullable=False)
    id_item        = Column(Integer, ForeignKey("Item.id_item"), nullable=False)
    __table_args__ = (
        UniqueConstraint(name_axis, id_item),
    )

Как мне это сделать?

Заранее благодарю за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...