На мой
непрофессиональный взгляд, можно хранить в дополнительном словаре соответствие st номеру row в myresults, потом пройтись по множеству удалённых строк, по словарю определить для каждой номер row в myresults и построить запрос на удаление, используя значения из row. Это решает проблему удаления.
Вариация — добавить в БД автоинкрементируемый столбец id, в словаре сохранять именно этот id (st→id), тогда запрос на удаление получается гораздо проще.
Для добавления, мне кажется, только парсить строку регуляркой.
import re;
line = '25.06.2019 272\xd0\xb0 4 13:20 - 14:50 \xd0\xbb\xd0\xb5\xd0\xba. \xd0\xad\xd0\xba\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb8\xd0\xba\xd0\xb0 \xd0\xbe\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 \xd0\x9a\xd0\xb0\xd0\xbb\xd1\x83\xd0\xb3\xd0\xb8\xd0\xbd\xd0\xb0 \xd0\x9d.\xd0\x90. 314 \xd0\x9d ';
expr = re.compile('^([0-9.]+) ([0-9\xd0\xb0-\xd1\x8f]+) (\d+) (\d+:\d+) - (\d+:\d+) (.*) (\d+ \xd0\x9d) $');
match = expr.match(line);
for val in match.groups() :
print(val);
Либо более читаемо,
# -*- coding: utf-8 -*-
# комментарий выше должен быть первой или второй строкой в файле исходника, содержащего юникод (здесь, русские буквы)
import re;
line = '25.06.2019 272а 4 13:20 - 14:50 лек. Экономика организации Калугина Н.А. 314 Н ';
expr = re.compile('^([0-9.]+) ([0-9а-я]+) (\d+) (\d+:\d+) - (\d+:\d+) (.*) (\d+ Н) $');
match = expr.match(line);
for val in match.groups() :
print(val);