Запись ячейки с типом TEXT как переменной в SQLITE

Писал чат-бота, использовал SQLite, и вскоре нашел в нем ошибку. Когда записываю значения в базу данных подобным образом:

update users
set ... menu = "shoes" ..., shoes = "[2, 1, 2, 2]"
where id = 1

Возникает проблема, хоть тип ячейки menu текст, он воспринимает в этом случае текст shoes как переменную, и записывает вместо самого текста, значение переменной. Чтобы проанализировать проблему, использовал это:

send(f'''update users
set id = {bot_id}, nick = "{nick}", menu = "{menu}", ..., shoes = "{shoes}"
where id = {bot_idm}''')

На выходе получилось вот что:

update users 
set id = 1, nick = ".mlneko", menu = "main", ..., shoes = "[2, 1, 2, 2]",
where id = 1

При чтении из базы получился другой результат. Вместо текста 'shoes', в ячейке menu было записано значение другой ячейки shoes:

(1, '.mlneko', '[2, 1, 2, 2]', 30000, 1, 0, 0, 13, 50, 10, 6, 100, 980, '1', 1, 1, '[1]', '[1]', '[2, 1, 2, 2]', 1)

Код чтения из базы:

def read(self):
    try:
        c.execute(f'SELECT * FROM get_id WHERE vk_id = {event.obj["from_id"]}')
        # У меня две таблицы, в одной аккаунты без вк айди, а в другом чисто вк айди и бот айди.
        self.isreg = 1
        self.bot_id = c.fetchall()[0][0]
        self.vk_id = event.obj['from_id']
        c.execute(f'SELECT * FROM users WHERE id = {self.bot_id}')
        self.result = c.fetchall()[0]
        result = self.result
        self.nick = result[1]
        self.menu = result[2]
        ...
        # Чтобы вместо '[1, 2, 3]' был полноценный список.
        exec(f'self.shoes = {result[18]}')

база данных создавалась таким образом:

CREATE TABLE "users" (
    "id"    INTEGER,
    "nick"  TEXT,
    "menu"  TEXT,
    ...,
    "shoes" TEXT
    PRIMARY KEY("id" AUTOINCREMENT)
);

Как исправить? Может менять базу данных? Какая будет наиболее приближенная к SQLite?


Ответы (0 шт):