簡體   English   中英

使用SqlAlchemy的連接條件錯誤

[英]Error on join condition with SqlAlchemy

我正在嘗試在python應用程序上使用SQLAlchemy,但是多對多關系存在問題。 我有4張桌子:

用戶,標志,命令,通道和命令_通道_標志

commandes_channels_flags包含每個相關表的外鍵(commandes,channels和flags)

用戶也具有flag_id作為外鍵。

因此,我嘗試鏈接命令,通道和標志。 目的是要知道命令可以在通道上運行以進行標記。

我這樣做:

from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Base = declarative_base()


class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    pseudo = Column(String(50), unique=True, nullable=False)
    flag_id = Column(ForeignKey('flags.id'))


class Flag(Base):
    __tablename__ = 'flags'

    id = Column(Integer, primary_key=True)
    irc_flag = Column(Integer)
    nom = Column(String(50))

    users = relationship("User", backref="flag", order_by="Flag.irc_flag")
    commande = relationship("Commande", secondary="commandes_channels_flags", back_populates="flags")
    channel = relationship("Channel", secondary="commandes_channels_flags", back_populates="flags")


class Channel(Base):
    __tablename__ = 'channels'

    id = Column(Integer, primary_key=True)
    uri = Column(String(50))
    topic = Column(String(255))

    commande = relationship("Commande", secondary="commandes_channels_flags", back_populates="channels")
    flag = relationship("Flag", secondary="commandes_channels_flags", back_populates="channels")


class Commande(Base):
    __tablename__ = 'commandes'

    id = Column(Integer, primary_key=True)
    pattern = Column(String(50))

    channel = relationship("Channel", secondary="commandes_channels_flags", back_populates="commandes")
    flag = relationship("Flag", secondary="commandes_channels_flags", back_populates="commandes")


class CommandeChannelFlag(Base):
    __tablename__ = 'commandes_channels_flags'

    id = Column(Integer, primary_key=True)
    commande_id = Column(ForeignKey('commandes.id'))
    channel_id = Column(ForeignKey('channels.id'))
    flag_id = Column(ForeignKey('flags.id'))

但是我有這個錯誤:

sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper|Commande|commandes' has no property 'channels'

我了解我的表格鏈接中有一個錯誤,但找不到。

back_populates需要與另一個模型上相關屬性的確切名稱匹配。 Channel ,您具有back_populates="channels" ,但在Commande ,您具有:

channel = relationship("Channel", secondary="commandes_channels_flags", back_populates="commandes")

而是將channel = relationship更改為channels = relationship

你還需要改變其他關系屬性Flag.commandesFlag.channelsChannel.commandesChannel.flagsCommande.flags以符合您back_populates參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM