Ну я так понял что telebot создаёт потоки при вызове, я так думаю что всё заработает если создать новое подключение к БД в нужном потоке (В функции handle_admin_dz). А ещё этот блок с elif можно просто убрать так как при выборе любого предмета отправляется одно и то же ДЗ и заменить просто на If in DZlist:
DZlist = ['Геометрия', 'Русский' ......]
if message.text in DZlist:
bot.send_message(message.chat.id, "Запишите дз")
else:
pass