Запись ячейки с типом 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?