Как сделать из int str?

async def register(self, user):
        async with self.pool.acquire() as conn:
            async with conn.cursor() as cur:
                result = await cur.execute("SELECT * FROM profile WHERE uid=%s", user.id)
                row = await cur.fetchall()
                if result == 0:
                    await cur.execute("INSERT INTO profile VALUES( CAST(admin as text))")
                else:
                    return row


Как сделать поле Admin(int) в str, что бы место цыфр ролей были нормальные роли, как (Участник, Хелпер, Админ, Модератор), а не 1, 2, 3, 4
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Ну вот у тебя в row набор значений из базы по uid=..., тебе нужно взять то что тебе нужно и отобразить в названия ролей. Например, с помощью словаря, в котором каждому числовому значению присвоено своё строковое:

my_awesome_dict = {
    1: "Первый",
    2: "Второй",
    10: "Десятый".
}

print (my_awesome_dict[admin])


Зачем там дальше делается неправильный insert? Он же просто вернёт ошибку, так как в запросе нет никакого admin, чтобы вставить в таблицу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
Вот этот список/таблица в которой номеру соответствует строка-описание называется справочник
У тебя 2 основных подхода, хранить эту таблицу в базе данных (особенно если приложение должно уметь его редактировать) либо хранить его на клиенте и подставлять в программе

Про хранение на клиенте тебе уже подсказали

Про хранение в базе данных - либо ты создаешь буквально таблицу-справочник, либо про создании таблицы (твоя profile) определить не числовое поле а enum со строковыми описаниями (подходит для очень небольшого количества записей)

При использовании таблицы-справочника sql запрос будет примерно таким
select ... from profile p left join admin_cls a on p.admin=a.id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы