Если не вдаваться в суть того, что делает код, то вы тут запускаете запросы в цикле, в итоге у вас 640*17 запросов, что и тормозит все.
Причем, если правильно понимаю, вы уже получили все данные из таблицы, а потом запрашиваете их еще раз построчно. Вообще неясно зачем.
Попробуйте строку
item_db = cur.execute("SELECT * FROM direction_db WHERE id=(%s)" % row).fetchone()
поднять на уровень выше, до цикла
for row in range(2....
а то делаете один и тот же запрос по 17 раз, смысла от которого нет.
Но в идеале от этого запроса в цикле вообще можно и нужно избавиться