Python таблицы редактирование по переменной SQLite

Почему оно не редачит именно по переменной, по тексту который я напишу оно меняет

ans_tabl = input("Введіть таблицю, з якою ви будете працювати: ")
name_column = input("Введіть назву стовбця в якому ви хочете змінити параметр: ")
value_column = input("Введіть параметр який ви хочете змінити: ")
your_recording = input("Введіть новий параметр: ")

cur.execute("""UPDATE {tabl} SET {nc} = '{vc}' WHERE {nc} = '{yc}'""".format(tabl=ans_tabl, nc=name_column, yc=your_recording, vc=value_column))

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

Автор решения: Violet

Создание таблицы:

CREATE TABLE "ttable" ("ncol" TEXT)

Проверка исходных данных:

cursor = conn.execute("SELECT * FROM ttable").fetchall()

>>> [('1',), ('2',), ('3',), ('4',)]

Проверка кода из вопроса:

import sqlite3

db = '1219138.db'

table = input("Введіть таблицю, з якою ви будете працювати: ")
nc = input("Введіть назву стовбця в якому ви хочете змінити параметр: ")
vc = input("Введіть параметр який ви хочете змінити: ")
yc = input("Введіть новий параметр: ")

conn = sqlite3.connect(db)
cursor = conn.cursor()
cursor.execute("UPDATE {table} SET {nc} = {yc} WHERE {nc} = {vc}".format(table=table, nc=nc, vc=vc, yc=yc))
conn.commit()

>>> Введіть таблицю, з якою ви будете працювати: ttable
>>> Введіть назву стовбця в якому ви хочете змінити параметр: ncol
>>> Введіть параметр який ви хочете змінити: 2
>>> Введіть новий параметр: 9

Проверка данных:

cursor = conn.execute("SELECT * FROM ttable").fetchall()

>>> [('1',), ('9',), ('3',), ('4',)]

Если же Введіть новий параметр: будет содержать текст, например test, то получим ошибку:

sqlite3.OperationalError: no such column: test

Поэтому передаём текст в кавычках:

Введіть таблицю, з якою ви будете працювати: ttable
Введіть назву стовбця в якому ви хочете змінити параметр: ncol
Введіть параметр який ви хочете змінити: 4
Введіть новий параметр: "test"
→ Ссылка