Как работать с БД из другого класса?
Из приведённого кода не понятно для чего вообще выделен класс 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...
Посмотри в сторону паттерна singleton, смысл его ипользования в создании единого экземпляра и использования этого экземпляра везде где нужно!
Должно получиться что-то типо такого, останется дописать методы выполнения запроса 

import sqlite3

class Db(object):
  
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, 'instance') or not cls.instance:
          cls.instance = super().__new__(cls)
        return cls.instance

    def __init__(self, connection_args):
        self.connector = sqlite3.connect(connection_args)