@Durilka96

Как передать имя базы данных в другую функцию?

написал уже класс, но все еще бьюсь с проблемой видимости имени базы данных в другой функции.
есть класс
class base:
    def __init__( self ):
        self.main_database_name=None
        self.sqlite_connection=None
        self.cursor=None
        self.sqlite_create_table_query=None
        self.query=None
        self.parametr=None
        self.one_result=None
        
    def connect(self,main_database_name):
        self.main_database_name=main_database_name
        self.sqlite_connection = sqlite3.connect(main_database_name)
        self.cursor = self.sqlite_connection.cursor()
        return main_database_name

    def close(self):
        if (self.sqlite_connection):
            self.sqlite_connection.close()
            print("закрыто")

    def create_table(self,sqlite_create_table_query):
        self.sqlite_create_table_query =sqlite_create_table_query
        self.cursor.execute(sqlite_create_table_query)
        self.sqlite_connection.commit()
        return print("сохранено")

    def insert(self,query,parametr):
        self.query=query
        self.parametr=parametr
        self.cursor.execute(query,parametr)
        self.sqlite_connection.commit()
        print("записано")

    def select_many(self,query,id):
        self.cursor.execute(query)
        self.one_result=self.cursor.fetchmany(size=id)
        return print(self.one_result)

    def select_singl(self,query):
        self.cursor.execute(query)
        self.one_result=self.cursor.fetchone()
        return self.one_result

затем есть 2 функции в одной я хочу открыть базу данных и чтобы значение имени базы данных, которое я открыл через файловый менеджер передалось во вторую функцию
первая функция :
def connect():
    name_DB = filedialog.askopenfilename(filetypes=(("Database", ".db"),))   
    mdb=base()
    mdb.connect(name_DB)
    return name_DB   

def download():
    # подключение к бд
    name_DB=connect()
    db=base()
    db.connect(name_DB)
    sqlite_create_table_query='''CREATE TABLE session (id INTEGER PRIMARY KEY ,ip_src TEXT ,ip_dst TEXT ,sport TEXT , dport TEXT ,request TEXT ,response TEXT );'''
    db.create_table(sqlite_create_table_query)

вторая функция, в которую я хочу передать значение имени базы данных(данная функция срабатывает по событию onClick и нет вариантов здесь вызывать каждый раз имя базы данных):
def on_select(event):
    print(#имя базы данных) #<- как мне здесь вывести имя этой базы данных
    # Если привязывались не к событию <<TreeviewSelect>>,
    # то тут нужно проверить, что вообще что-то выбрано:
    if not tree.selection():
        return
    # Получаем id первого выделенного элемента
    selected_item = tree.selection()[0]
    # Получаем значения в выделенной строке
    values = tree.item(selected_item, option="values")
    print(values[0])


или подскажите, как можно подключить базу данных чтобы подключение к ней было в любых функциях которые есть без принудительного подключения в них самих
  • Вопрос задан
  • 188 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Alexa2007
Это во первых:
from base import Base as db
def connect(db):
......
def download(db):
........

Так будешь подключен к одному объекту
Во вторых:
class base:
    def __init__( self ):
        self.main_database_name=None
.............

    @property
    def db_name(self):
        _db_name = self.main_database_name
        return _db_name

Ну а дальше:
def on_select(event, db):
    print(db.db_name)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы