Из приведённого кода не понятно для чего вообще выделен класс Sql.
Фактически вы используете только один метод этого класса, а содержимое конструктора можно разместить в том же методе.
Бессмысленно и беспощадно.
Самое правильное - это делать всё как можно проще.
Вот два очень полезных принципа в разработке:
-
https://ru.wikipedia.org/wiki/KISS_(принцип)
-
https://ru.wikipedia.org/wiki/Бритва_Оккама
В приведённом вами куске кода не нужен класс sql, достаточно сделать всё внутри одной функции, ведь вы не используете созданный обьект больше никак.
Другой вопрос, если вам нужно делать много запросов в рамках одного подключения к БД. На подключение тратяся некоторые накладные расходы по времени и трафику, иногда логично вынести подключение и хранить его в выделенном персистентном состоянии, которое будет создано один раз и переиспольовано для множества запросов. В этом случае закрывать коннект после запроса нельзя.
Прочитайте вот:
https://pavel-karateev.gitbook.io/intermediate-pyt...
Обычно коннект к БД уже является менеджером контекста. Для чего вы делаете вот эту бессмысленную обёртку вокруг - не ясно.
В соответствии с хоошим стилем прогаммирования нужно, чтобы действие любой функции можно было охарактеризовать простой короткой фразой без союзов, без "и" и "или", без "если".
Иначе эту функцию стоило бы разбить на более мелкие и простые функции.
Вот ознакомьтесь с концепцией чистой функции:
https://dvmn.org/encyclopedia/clean_code/decomposi...