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
→ Ссылка
cur.execute(query1)- выполняет запрос, но не читает возвращенные записи автоматически.- SQL команда
INSERTничего не возвращает - она просто вставляет записи в таблицу. - я переписал запрос с использованием параметризированных значений дабы избежать рисков, связанных с SQL Injections
- Не забывайте зафиксировать DML при помощи команды
COMMIT - Чтобы просмотреть результат вставки можно вычитать записи из таблицы
toto - Если вы все еще не видите новых записей в таблице
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())