Эта конкретная ошибка была вызвана ошибкой ввода и отдельными Base
классами, которые вы создавали до того, как вы их закомментировали.Я предполагаю, что определения модели изначально были в отдельных файлах.
relationship()
ожидает сопоставленный класс или строку, которая разрешается, например, в качестве первого аргумента, но вы передали его 'course'
, который разрешается в Table
класс отображается на.Кажется, что в вашем примере здесь вы исправили ссылку на 'Course'
.
Строковый аргумент, именующий класс, переданный relationship()
, разрешается во время времени компиляции mapper путем его поискаиз реестра классов, связанного с Base
.Но в вашем примере вы создали отдельные Base
классы для каждой из ваших моделей и ассоциативного Table
, поэтому поиск завершился неудачно, поскольку все классы находятся в отдельных реестрах.
Ошибка возникает при использованииSession
впервые, потому что мапперы настроены лениво.Кроме того, configure_mappers()
может использоваться для явной настройки любых ожидающих изменений.
В вашем определении Course
скрывается другая ошибка: вместо back_populates='courses'
, который вы использовалиbackref='courses'
и так во время настройки возникает следующая ошибка:
Traceback (most recent call last):
File "wtf.py", line 60, in <module>
configure_mappers()
File "~/Work/sqlalchemy/lib/sqlalchemy/orm/mapper.py", line 3029, in configure_mappers
mapper._post_configure_properties()
File "~/Work/sqlalchemy/lib/sqlalchemy/orm/mapper.py", line 1828, in _post_configure_properties
prop.init()
File "~/Work/sqlalchemy/lib/sqlalchemy/orm/interfaces.py", line 184, in init
self.do_init()
File "~/Work/sqlalchemy/lib/sqlalchemy/orm/relationships.py", line 1659, in do_init
self._generate_backref()
File "~/Work/sqlalchemy/lib/sqlalchemy/orm/relationships.py", line 1849, in _generate_backref
(backref_key, self, m))
sqlalchemy.exc.ArgumentError: Error creating backref 'courses' on relationship 'Course.students': property of that name exists on mapper 'Mapper|Student|student'