簡體   English   中英

創建關系時出現 SQLAlchemy 錯誤

[英]SQLAlchemy error when creating relationship

我正在嘗試創建多對多關系,但出現錯誤,我似乎無法解決(語言是 Python,數據庫是 MySQL)。

我正在使用的三個類(都來自聲明性基礎)是 CMClass、Grades,然后是關聯表 AssociationTable_CMClass_Grade。

它們如下(對不起意圖):

class CMClass(med.DeclarativeBase):
__tablename__ = "CMClasses"

id = Column('ID', Integer, primary_key=True, autoincrement=True)
name = Column('NAME', String(100), unique=False)

cmClassTypeID = Column('CMCLASS_TYPE_ID', Integer, ForeignKey(CMClassType.id))
venueID = Column('VENUE_ID', Integer, ForeignKey(Venue.id))
staffMemberID = Column('STAFF_MEMBER_ID', Integer, ForeignKey(StaffMember.id))

classTimeFrom = Column('CLASS_TIME_FROM', DateTime, nullable=True)
classTimeTo = Column('CLASS_TIME_TO', DateTime, nullable=True)

cmClassType = relationship('CMClassType', foreign_keys='CMClass.cmClassTypeID')
venue = relationship('Venue', foreign_keys='CMClass.venueID')
staffMember = relationship('StaffMember', foreign_keys='CMClass.staffMemberID')

listGradeObjects = relationship('Grades', secondary=AssociationTable_CMClass_Grade, backref='CMClasses')

——

class Grade(med.DeclarativeBase):
__tablename__ = "Grades"

id = Column('ID', Integer, primary_key=True, autoincrement=True)
name = Column('NAME', String(50), unique=True)
schoolTypeID = Column('SCHOOL_TYPE_ID', Integer, ForeignKey(SchoolType.id))
gradeLevelID = Column('GRADE_LEVEL_ID', Integer, ForeignKey(GradeLevel.id))
gradeValueID = Column('GRADE_VALUE_ID', Integer, ForeignKey(GradeValue.id))

——

class AssociationTable_CMClass_Grade(med.DeclarativeBase):
    __tablename__ = 'AssociationTable_CMClass_Grade'
    cmClassID = Column('cmClassID', Integer, ForeignKey('CMClasses.ID'), primary_key=True)
    gradeID = Column('gradeID', Integer, ForeignKey('Grades.ID'), primary_key=True)

系統中的扭結來自listGradeObjects,CMClass 類中的關系。 它似乎不想工作。 我收到一條錯誤消息,但我發現它沒有太大幫助。 我確定我以前用過同樣的方法!

sqlalchemy.exc.ArgumentError: secondary argument <class 'MainDirectory.ORMClasses.AssociationTableClasses.AssocationTable_CMClasses_Grades.AssociationTable_CMClass_Grade'> passed to to relationship() CMClass.listGradeObjects must be a Table object or other FROM clause; can't send a mapped class directly as rows in 'secondary' are persisted independently of a class that is mapped to that same table.

感謝您的任何幫助!

好吧,我想回復任何查找該錯誤並最終出現在這里的人。 我自己查了一下,發現的很少。

無論如何,這是它的工作原理:

_targetGradesClassName = 'Grade'
_targetAssociationTableName = 'AssociationTable_CMClass_Grades'
_targetGradesBackRefName = 'CMClasses'

@declared_attr
def listGradeObjects(cls):
    return relationship(f'{cls._targetGradesClassName}', secondary=f'{cls._targetAssociationTableName}', backref=f'{cls._targetGradesBackRefName}')

我相信還有其他方法,更簡單的方法,但我要說如果它有效,它就有效。

暫無
暫無

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

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