Почему я получаю сообщение «NameError: у модуля qs_dashboard_permission нет сопоставленных классов, зарегистрированных пPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему я получаю сообщение «NameError: у модуля qs_dashboard_permission нет сопоставленных классов, зарегистрированных п

Сообщение Anonymous »

Проблема
У меня есть база данных с таблицами с именами qs_dashboard и Profile, которые связаны с промежуточной таблицей с именем Dashboard_permissions. Моя проблема заключается в том, что когда я пытаюсь добавить связь в свои модели SQLAlchemy из Dashboard в Profile через Dashboard_permissions.profile_id, я получаю следующую ошибку, независимо от того, тестирует ли мой код новый отношения:
NameError: Module 'qs_dashboard_permission' has no mapped classes registered under the name '_sa_instance_state'

Я понятия не имею, что означает _sa_instance_state.
Трассировка стека указывает на первый раз, когда оценивается запрос. Пример:
query = select(Profile).filter(Profile.uuid == 'some uuid')
profile: Profile = session.scalars(query).first()

Соответствующие части моей схемы следующие:
  • панель управления

    id

    строка
  • PK


[*]dashboard_permissions
  • dashboard_id

    строка
  • PK
  • FK -> панель управления
< /li>
[*]profile_id
  • целое число
  • PK
  • FK -> профиль
[*]shared_by_id
  • целое число
  • FK -> профиль
  • Этот элемент не следует использовать для сопоставления панели управления с профилем
< /li>


[*]профиль
  • id
    целое число
  • PK



Попытки решения
  • Я попробовал несколько различных конфигураций для Dashboard.profiles включая использование параметров перекрытия и back_populates, но я продолжаю получать одно и то же сообщение об ошибке.
  • Когда я удаляю Dashboard.profiles, все мои модульные тесты начинают работать опять же, кроме тех, которые используют Dasboard.profiles.
Файлы моделей:
dashboard.py
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .profile import Profile
from .dashboard_permission import DashboardPermissions
else:
Profile = 'Profile'
DashboardPermissions = 'DashboardPermissions'

from . import Base

from sqlalchemy import (
String,
)
from sqlalchemy.orm import (
mapped_column,
relationship,
Mapped,
DynamicMapped,
)

class Dashboard(Base):
__tablename__ = 'dashboard'

id: Mapped[str] = mapped_column(String, primary_key = True)

profiles: DynamicMapped[Profile] = relationship(Profile,
lazy = 'dynamic',
secondary = 'dashboard_permission',
foreign_keys = 'DashboardPermissions.profile_id',
#overlaps = 'qs_dashboard_permissions',
#back_populates = 'dashboards',
)

profile.py
from sqlalchemy import Integer
from sqlalchemy.orm import (
mapped_column,
Mapped,
)

class Profile(Base):
__tablename__ = 'profile'

id: Mapped[Integer] = mapped_column(Integer, primary_key = True, index = True, unique = True)

dashboard_permissions.py
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .profile import Profile
from .dashboard import Dashboard
else:
Profile = 'Profile'
Dashboard = 'Dashboard'

from . import Base

from sqlalchemy import (
ForeignKey,
Integer,
String,
)
from sqlalchemy.orm import (
relationship,
mapped_column,
Mapped,
)

from sqlalchemy import (
DateTime,
)

from .enums.qs_permission import QsPermission

import boto3

cognito = boto3.client('cognito-idp')

class DashboardPermissions(Base):
__tablename__ = 'dashboard_permissions'

profile_id: Mapped[int] = mapped_column(Integer, ForeignKey('profile.id'), primary_key = True)
profile: Mapped[Profile] = relationship(Profile, foreign_keys = [profile_id], back_populates = 'dashboard_permissions', overlaps='dashboard_permissions')

dashboard_id: Mapped[str] = mapped_column(String, ForeignKey('dashboard.id'), primary_key = True)
dashboard: Mapped[Dashboard] = relationship(Dashboard, foreign_keys = [dashboard_id], overlaps='dashboard_permissions')

shared_by_id: Mapped[int] = mapped_column(Integer, ForeignKey('profile.id'))
shared_by: Mapped[Profile] = relationship(Profile, foreign_keys = [shared_by_id], back_populates = 'dashboard_permissions_shared', overlaps='dashboard_permissions')


Подробнее здесь: https://stackoverflow.com/questions/789 ... apped-clas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»