ArgumentError: отношение ожидает аргумент класса или сопоставителя
Я получаю эту странную ошибку, и я говорю странно, потому что я внес изменения в несвязанной таблицы.
Я пытаюсь запросить 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'))
и вот как я его запрашиваю:
Device = DBSession.query(TDevice).filter(TDevice.ixDevice == device_id).one()
как только эта строка выполняется, я получаю ошибку:
ArgumentError: relationship 'report_type' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
единственные изменения, которые я сделал, это добавить отношение report_type в my 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'))
Я все еще новичок в SqlAlchemy, поэтому я не вижу, как добавление этой связи должно вызывать эту ошибку, если я повторяю другую таблицу
1 ответов
не доволен собой, так как это такая глупая ошибка, но вот мой виновник:
report_type = relationship('tReportType',
uselist=False,
backref=backref('report'))
должно быть:
report_type = relationship('TReportType',
uselist=False,
backref=backref('report'))
капитал T вместо t, поэтому я должен ссылаться на класс, а не на мою фактическую таблицу:'tReportType'
->'TReportType'