ArgumentError:relationship需要一个类或映射器参数

joh*_*ohn 23 python sqlalchemy pyramid

我得到了这个奇怪的错误,我说的很奇怪,因为我改变了一个不相关的表.

我试图查询我的tDevice表,看起来像这样:

class TDevice(Base):
    __tablename__ = 'tDevice'

    ixDevice = Column(Integer, primary_key=True)
    ixDeviceType = Column(Integer, ForeignKey('tDeviceType.ixDeviceType'), nullable=False)
    ixSubStation = Column(Integer, ForeignKey('tSubStation.ixSubStation'), nullable=False)
    ixModel = Column(Integer, ForeignKey('tModel.ixModel'), nullable=True)
    ixParentDevice = Column(Integer, ForeignKey('tDevice.ixDevice'), nullable=True)
    sDeviceName = Column(Unicode(255), nullable=False)#added

    children = relationship('TDevice',
                        backref=backref('parent', remote_side=[ixDevice]))

    device_type = relationship('TDeviceType',
                           backref=backref('devices'))

    model = relationship('TModel',
                     backref=backref('devices'))

    sub_station = relationship('TSubStation',
                           backref=backref('devices'))
Run Code Online (Sandbox Code Playgroud)

这就是我查询它的方式:

Device = DBSession.query(TDevice).filter(TDevice.ixDevice == device_id).one()
Run Code Online (Sandbox Code Playgroud)

一旦执行此行,我就会收到错误:

ArgumentError: relationship 'report_type' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
Run Code Online (Sandbox Code Playgroud)

我所做的唯一更改是在my中添加一个report_type关系tReportTable ,现在看起来像这样:

class TReport(Base):
__tablename__ = 'tReport'

ixReport = Column(Integer, primary_key=True)
ixDevice = Column(Integer, ForeignKey('tDevice.ixDevice'), nullable=False)
ixJob = Column(Integer, ForeignKey('tJob.ixJob'), nullable=False)
ixReportType = Column(Integer, ForeignKey('tReportType.ixReportType'), nullable=False) # added

report_type = relationship('tReportType',
                           uselist=False,
                           backref=backref('report'))

device = relationship('TDevice',
                      uselist=False,
                      backref=backref('report'))

job = relationship('TJob',
                   uselist=False,
                   backref=backref('report'))
Run Code Online (Sandbox Code Playgroud)

我还是SqlAlchemy的新手,所以如果我在迭代另一个表,我似乎无法看到如何添加该关系会导致此错误

joh*_*ohn 46

我不满意,因为这是一个如此愚蠢的错误,但这是我的罪魁祸首:

report_type = relationship('tReportType',
                           uselist=False,
                           backref=backref('report'))
Run Code Online (Sandbox Code Playgroud)

应该:

report_type = relationship('TReportType',
                           uselist=False,
                           backref=backref('report'))
Run Code Online (Sandbox Code Playgroud)

大写T而不是t,我应该引用类,而不是我的实际表名:'tReportType'- >'TReportType'

  • 仅供未来的人使用:我的问题是我写了__tablename__的值而不是类名 (16认同)
  • 这就是这个. (3认同)