SQLModel/SQLAlchemy Проблема с сопоставителем модели при запросе в пустых таблицах ⇐ Python
-
Anonymous
SQLModel/SQLAlchemy Проблема с сопоставителем модели при запросе в пустых таблицах
Я относительно новичок в SQLModel и SQLAlchemy, однако не могу разобраться в этом.
В основном проблема: используя SQLite в качестве базы данных, у меня есть таблица configs, которая содержит 3 UUID для разных подконфигураций (сервер, пользователь и бизнес), все в отдельных таблицах. Я объявляю модели следующим образом:
class ServerConfigBase(SQLModel): """Базовая конфигурация сервера.""" адрес: ул. порт: интервал app_configs: List["Config"] = Связь(back_populates="server") класс ServerConfig (ServerConfigBase, таблица = True): """Конфигурационная модель, описывающая поля сетевых коммуникаций""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) класс BusinessConfigBase(SQLModel): """Базовая бизнес-конфигурация.""" ... app_configs: List["Config"] = Связь(back_populates="business") класс BusinessConfig (BusinessConfigBase, таблица = True): """Модель конфигурации, описывающая поля, связанные с бизнесом""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) класс UserConfigBase(SQLModel): """Базовая конфигурация пользователя.""" имя: ул. app_configs: List["Config"] = Связь(back_populates="user") класс UserConfig (UserConfigBase, таблица = True): """Модель конфигурации, описывающая поля, настраиваемые пользователем""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) класс ConfigBase(SQLModel): """Базовая конфигурация.""" сервер: ServerConfig = Связь(back_populates="app_configs") server_conf_id: UUID = Поле (foreign_key=ServerConfig.id) бизнес: BusinessConfig = Связь(back_populates="app_configs") business_conf_id: UUID = Поле (foreign_key=BusinessConfig.id) пользователь: UserConfig = Связь(back_populates="app_configs") user_conf_id: UUID = Поле (foreign_key=UserConfig.id) Random_list_of_string_field: List[Dict] = Field(sa_column=Column(JSON[List[Dict]])) класс Config (ConfigBase, таблица = True): """Конфигурация таблицы.""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) активно: bool = Ложь Когда я проверяю при запуске, существует ли активная конфигурация через session.exec(select(Config).where(Config.active == True)).first() (в случае наличия базы данных файл уже заполнен) я получаю следующую ошибку:
sqlalchemy.exc.UnboundExecutionError: не удалось найти привязку, настроенную в сопоставленном классе Config->config, выражении SQL или этом сеансе. То же самое произойдет, если я просто выберу все на столе. Не знаю, почему моя модель отображается неправильно. Трассировка стека:
Файл "/Users/somaf/repos/api/src/api/controllers/config.py", строка 91, в read_configs вернуть session.exec(select(Config)).all() Файл «/Users/somaf/repos/api/.venv/lib/python3.9/site-packages/sqlmodel/orm/session.py», строка 60, в exec результаты = супер().execute( Файл "/Users/somaf/repos/api/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", строка 1705, выполняется привязка = self.get_bind(**bind_arguments) Файл «/Users/somaf/repos/api/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py», строка 2154, в get_bind поднять sa_exc.UnboundExecutionError( sqlalchemy.exc.UnboundExecutionError: не удалось найти привязку, настроенную для сопоставленного класса Config->config, выражения SQL или этого сеанса. Я не забыл создать таблицы, да и сессия настроена правильно. Будем очень признательны за любую помощь и извините, если это нубский вопрос.
Я относительно новичок в SQLModel и SQLAlchemy, однако не могу разобраться в этом.
В основном проблема: используя SQLite в качестве базы данных, у меня есть таблица configs, которая содержит 3 UUID для разных подконфигураций (сервер, пользователь и бизнес), все в отдельных таблицах. Я объявляю модели следующим образом:
class ServerConfigBase(SQLModel): """Базовая конфигурация сервера.""" адрес: ул. порт: интервал app_configs: List["Config"] = Связь(back_populates="server") класс ServerConfig (ServerConfigBase, таблица = True): """Конфигурационная модель, описывающая поля сетевых коммуникаций""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) класс BusinessConfigBase(SQLModel): """Базовая бизнес-конфигурация.""" ... app_configs: List["Config"] = Связь(back_populates="business") класс BusinessConfig (BusinessConfigBase, таблица = True): """Модель конфигурации, описывающая поля, связанные с бизнесом""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) класс UserConfigBase(SQLModel): """Базовая конфигурация пользователя.""" имя: ул. app_configs: List["Config"] = Связь(back_populates="user") класс UserConfig (UserConfigBase, таблица = True): """Модель конфигурации, описывающая поля, настраиваемые пользователем""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) класс ConfigBase(SQLModel): """Базовая конфигурация.""" сервер: ServerConfig = Связь(back_populates="app_configs") server_conf_id: UUID = Поле (foreign_key=ServerConfig.id) бизнес: BusinessConfig = Связь(back_populates="app_configs") business_conf_id: UUID = Поле (foreign_key=BusinessConfig.id) пользователь: UserConfig = Связь(back_populates="app_configs") user_conf_id: UUID = Поле (foreign_key=UserConfig.id) Random_list_of_string_field: List[Dict] = Field(sa_column=Column(JSON[List[Dict]])) класс Config (ConfigBase, таблица = True): """Конфигурация таблицы.""" идентификатор: Необязательно [UUID] = Поле (по умолчанию = Нет, Primary_key = True) активно: bool = Ложь Когда я проверяю при запуске, существует ли активная конфигурация через session.exec(select(Config).where(Config.active == True)).first() (в случае наличия базы данных файл уже заполнен) я получаю следующую ошибку:
sqlalchemy.exc.UnboundExecutionError: не удалось найти привязку, настроенную в сопоставленном классе Config->config, выражении SQL или этом сеансе. То же самое произойдет, если я просто выберу все на столе. Не знаю, почему моя модель отображается неправильно. Трассировка стека:
Файл "/Users/somaf/repos/api/src/api/controllers/config.py", строка 91, в read_configs вернуть session.exec(select(Config)).all() Файл «/Users/somaf/repos/api/.venv/lib/python3.9/site-packages/sqlmodel/orm/session.py», строка 60, в exec результаты = супер().execute( Файл "/Users/somaf/repos/api/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py", строка 1705, выполняется привязка = self.get_bind(**bind_arguments) Файл «/Users/somaf/repos/api/.venv/lib/python3.9/site-packages/sqlalchemy/orm/session.py», строка 2154, в get_bind поднять sa_exc.UnboundExecutionError( sqlalchemy.exc.UnboundExecutionError: не удалось найти привязку, настроенную для сопоставленного класса Config->config, выражения SQL или этого сеанса. Я не забыл создать таблицы, да и сессия настроена правильно. Будем очень признательны за любую помощь и извините, если это нубский вопрос.
Мобильная версия