[英]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.commandes
, Flag.channels
, Channel.commandes
, Channel.flags
和Commande.flags
以符合您back_populates
參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.