Python SQLAlchemy AmbiguousForeignKeysError - PullRequest
0 голосов
/ 01 апреля 2020

Я искал что-то, что могло бы помочь мне решить эту проблему, но все, что я нашел, не помогло. Так что я собираюсь поставить свою проблему здесь.

Исключение, которое я получаю, вот это:

sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between parent/child tables on relationship Cliente.Productos_suscritos - there are multiple foreign key paths linking the tables via secondary table 'ProductoFavoritoCliente'. Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference from the secondary table to each of the parent and child tables.

Я хотел установить отношения многие ко многим между двумя таблицами под названием «Cliente» и «ProductoTienda» с использованием промежуточной таблицы «ProductoFavoritoCliente»

И, похоже, SQLAlchemy теперь не знает, как установить связь с таблицей «ProductoFavoritoCliente», поскольку эта таблица имеет несколько внешние ключи.

Это классы отображения для таблиц.

class Cliente(Base):
    __tablename__ = 'Cliente'
    NombreUsuario = Column(String, primary_key=True)
    Contrasena = Column(String)

    # Relaciones NM
    Productos_suscritos = relationship('RelacionProductoTienda', secondary='ProductoFavoritoCliente')

    # Relaciones 1N
    Dispositivos = relationship('Dispositivo', back_populates="Usuario")
class RelacionProductoTienda(Base):
    __tablename__ = 'ProductoTienda'
    IDProducto = Column(String, ForeignKey('Producto.ID'), primary_key=True)
    IDTienda = Column(String, ForeignKey('Tienda.ID'), primary_key=True)
    Precio = Column(DECIMAL)
    Stock = Column(Integer)

    # Relaciones NM
    Clientes_suscritos = relationship('Cliente', secondary='ProductoFavoritoCliente')

И промежуточный класс

class RelacionProductoFavorito(Base):
    __tablename__ = 'ProductoFavoritoCliente'
    IDProducto = Column(String, ForeignKey('ProductoTienda.IDProducto'), primary_key=True)
    IDTienda = Column(String, ForeignKey('ProductoTienda.IDTienda'), primary_key=True)
    Usuario = Column(String, ForeignKey('Cliente.NombreUsuario'), primary_key=True)

Я пробовал разные решения, которые я нашел в Inte rnet, но, поскольку у меня не было успеха, я оставил код таким, каким он был изначально, когда произошла ошибка.

Например, я попытался добавить вещь foreign_keys в промежуточный класс 'RelacionProductoFavorito ', добавив эту строку:

ProductoTienda = relationship('RelacionProductoTienda', foreign_keys=[IDProducto, IDTienda])

Это также не сработало.

Что я делаю не так?

Кроме того, извините за не по-английски sh код.

...