sqlite3.cursor.execute не выполняет запорос на вставку из другой таблицы

В БД есть таблица(1), в которую надо записать значение из другой таблицы(2) этой же БД. В программе пользователь выбирает из listbox id записи которую надо занести из 2 в 1.

Часть кода который я написал и, как вы могли догадаться, он не работает. Ошибок не выдает, просто не выполняется запрос:

tir = #число, просто число 
query1 = f'Insert Into toto Select *,{tir} From matches where match_id= {lis.get(lis.curselection())[0]}'
cur.execute(query1)

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

Автор решения: MaxU
  1. cur.execute(query1) - выполняет запрос, но не читает возвращенные записи автоматически.
  2. SQL команда INSERT ничего не возвращает - она просто вставляет записи в таблицу.
  3. я переписал запрос с использованием параметризированных значений дабы избежать рисков, связанных с SQL Injections
  4. Не забывайте зафиксировать DML при помощи команды COMMIT
  5. Чтобы просмотреть результат вставки можно вычитать записи из таблицы toto
  6. Если вы все еще не видите новых записей в таблице toto, значит подзапрос Select *, ? From matches where match_id= ? не вернул ни одной записи и вставлять соответственно было нечего.
conn = sqlite3.connect('example.db')

cur = conn.cursor()
# ...

tir = #число, просто число 
query1 = f'Insert Into toto Select *, ? From matches where match_id= ?'
params = [tir, lis.get(lis.curselection())[0]]
cur.execute(query1, params)
conn.commit()

# читаем из `toto`
cur.execute("select * from toto")
records = list(cur.fetchall())
→ Ссылка