SQLAlchemy добавляет дочерний элемент к родительскому: столбец отношений не создан ⇐ Python
SQLAlchemy добавляет дочерний элемент к родительскому: столбец отношений не создан
Я просмотрел подобные вопросы по stackoverflow, но не нашел рабочего решения для моего конкретного случая. Я подозреваю, что проблема заключается на этапе создания родительского класса, поскольку я создаю его без my_cards, но понятия не имею, как его с его помощью создать, поскольку это поле отношения. У меня есть связь «один ко многим» в database_models.py:
класс UserBase(Base): """ Учетная запись для хранения и доступа к нескольким учебным карточкам """ __tablename__ = 'пользователи' id: Mapped[int] = mapped_column(Целое число, Primary_key=True, автоинкремент=True) telegram_id: Mapped[str] = mapped_column(String, unique=True) имя пользователя: Mapped[str] = mapped_column(String(100), unique=True) имя: Mapped[str] = mapped_column(String(200)) фамилия: Mapped[str] = mapped_column(String(200)) my_cards: Mapped[list['AssociationClass']] = отношения() класс CardBase(База): """ Обучающая карточка с текстом на лицевой и оборотной сторонах, привязанная к конкретному пользователю """ __tablename__ = 'карты' id: Mapped[int] = mapped_column(Целое число, Primary_key=True, автоинкремент=True) имя = сопоставленный_столбец (текст) фронт = сопоставленный_столбец (текст) назад = сопоставленный_столбец (текст) класс AssociationClass(Base): __tablename__ = 'association_table' user_id: Mapped[int] = Mapped_column(ForeignKey('users.id'), Primary_key=True) card_id: Mapped[int] = Mapped_column(ForeignKey('cards.id'), Primary_key=True) карта: Mapped['CardBase'] = отношение() Однако когда я пытаюсь выполнить следующее:
async def add_child_to_db( запрос, ребенок, my_async_session: AsyncSession): """ Добавляет дочерний класс к родительскому классу """ асинхронно с my_async_session.begin() в качестве сеанса: пытаться: родитель = ожидайте session.execute (запрос) родитель = родитель.первый() а = Класс Ассоциации() a.card = ребенок print(f'\n\n\n\n{a.card}\n\n\n\n') ожидайте родитель.my_cards.append(a) кроме SQLAlchemyError как exc: печать (искл.) поднимать окончательно: дождитесь сеанса.закрыть() Сеанс откатывается. Я получаю ошибку KeyError. Обратная трассировка:
Traceback (самый последний вызов — последний): Файл «/home/user/bots/bot/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py», строка 202, в _key_not_found self._key_fallback(ключ, нет) Файл «/home/user/bots/bot/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py», строка 141, в _key_fallback поднять KeyError(ключ) из ошибки Ключевая ошибка: «мои_карты» Я либо не понимаю синтаксис, либо неправильно создал базу данных. Любая помощь приветствуется. Готов предоставить дополнительную информацию по запросу.
Я просмотрел подобные вопросы по stackoverflow, но не нашел рабочего решения для моего конкретного случая. Я подозреваю, что проблема заключается на этапе создания родительского класса, поскольку я создаю его без my_cards, но понятия не имею, как его с его помощью создать, поскольку это поле отношения. У меня есть связь «один ко многим» в database_models.py:
класс UserBase(Base): """ Учетная запись для хранения и доступа к нескольким учебным карточкам """ __tablename__ = 'пользователи' id: Mapped[int] = mapped_column(Целое число, Primary_key=True, автоинкремент=True) telegram_id: Mapped[str] = mapped_column(String, unique=True) имя пользователя: Mapped[str] = mapped_column(String(100), unique=True) имя: Mapped[str] = mapped_column(String(200)) фамилия: Mapped[str] = mapped_column(String(200)) my_cards: Mapped[list['AssociationClass']] = отношения() класс CardBase(База): """ Обучающая карточка с текстом на лицевой и оборотной сторонах, привязанная к конкретному пользователю """ __tablename__ = 'карты' id: Mapped[int] = mapped_column(Целое число, Primary_key=True, автоинкремент=True) имя = сопоставленный_столбец (текст) фронт = сопоставленный_столбец (текст) назад = сопоставленный_столбец (текст) класс AssociationClass(Base): __tablename__ = 'association_table' user_id: Mapped[int] = Mapped_column(ForeignKey('users.id'), Primary_key=True) card_id: Mapped[int] = Mapped_column(ForeignKey('cards.id'), Primary_key=True) карта: Mapped['CardBase'] = отношение() Однако когда я пытаюсь выполнить следующее:
async def add_child_to_db( запрос, ребенок, my_async_session: AsyncSession): """ Добавляет дочерний класс к родительскому классу """ асинхронно с my_async_session.begin() в качестве сеанса: пытаться: родитель = ожидайте session.execute (запрос) родитель = родитель.первый() а = Класс Ассоциации() a.card = ребенок print(f'\n\n\n\n{a.card}\n\n\n\n') ожидайте родитель.my_cards.append(a) кроме SQLAlchemyError как exc: печать (искл.) поднимать окончательно: дождитесь сеанса.закрыть() Сеанс откатывается. Я получаю ошибку KeyError. Обратная трассировка:
Traceback (самый последний вызов — последний): Файл «/home/user/bots/bot/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py», строка 202, в _key_not_found self._key_fallback(ключ, нет) Файл «/home/user/bots/bot/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py», строка 141, в _key_fallback поднять KeyError(ключ) из ошибки Ключевая ошибка: «мои_карты» Я либо не понимаю синтаксис, либо неправильно создал базу данных. Любая помощь приветствуется. Готов предоставить дополнительную информацию по запросу.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
JQuery при нажатии на дочерний элемент добавляет класс к непрямому родительскому элементу
Anonymous » » в форуме Jquery - 0 Ответы
- 56 Просмотры
-
Последнее сообщение Anonymous
-