@Masvy

Как решить проблему с подключение к одной и той же таблице через Django orm и SQLAlchemy?

Всем привет. Делаю web app в телеграм. Бек пишу на django и с помощью django orm создаю таблицу:
from django.db import models


class Profile(models.Model):
    user_id = models.BigIntegerField()
    key = models.CharField(max_length=36, null=True)
    name = models.CharField(max_length=64, null=True, blank=True)
    user_name = models.CharField(max_length=32, null=True)
    photo = models.CharField(max_length=120, null=True)
    registration_date = models.DateField(auto_now_add=True, null=True)


Специфика моего проекта такова, что для работы с бд используется сразу и SQLAlchemy (для сбора данных внутри бота) и Django ORM (для сбора данных внутри web).

Вот, что я написал на алхимии:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, BigInteger, String, func, Date, Table

BaseModel = declarative_base()

profile_table = Table(
    'account_profile',
    BaseModel.metadata,
    Column('id', BigInteger, primary_key=True),
    Column('user_id', BigInteger, nullable=False),
    Column('key', String(36), nullable=True),
    Column('name', String(64), nullable=True),
    Column('user_name', String(32), nullable=True),
    Column('photo', String(120), nullable=True),
    Column('registration_date', Date, server_default=func.now())
)


Я опускаю некоторые моменты в подключении к уже существующей таблице через алхимию, так как всё прошло удачно, однако на стороне бота есть какие-то проблемы. Это код с операциями:
from database.table import profile_table
from sqlalchemy.orm import sessionmaker
from sqlalchemy import update, insert


async def add_user_id(user_id, session_maker: sessionmaker):
    _session_maker: sessionmaker = session_maker
    async with _session_maker() as session:
        async with session.begin():
            await session.execute(insert(profile_table).values(user_id=user_id))


async def update_key(key, user_id, session_maker: sessionmaker):
    _session_maker: sessionmaker = session_maker
    async with _session_maker() as session:
        async with session.begin():
            await session.execute(update(profile_table).where(profile_table.user_id == user_id).values(key=key))


Дело в том, что как только начинает выполнятся вторая функция, появляется ошибка: AttributeError: 'Table' object has no attribute 'user_id'.

Мне не очень понятно почему так? Как может таблица не иметь атрибута user_id, если первая функция выполняется хорошо и в случае с ней user_id имеется?

Если кто-то знает как это решить, то помогите, пожалуйста.
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
@codingoleg
Возможно, дело в асинхронности и race condition. Попробуй сделать функции обычными и проверь, будет ли ошибка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы