Я пишу код, который должен получить некоторые имена файлов, используя рекурсивную функцию ( scan_folder ) и записываю их в базу данных sqlite со второй функцией ( update_db ).
Первая проблема заключается в том, что всякий раз, когда scan_folder () вызывает себя, он сразу же вызывает update_db () , хотя это не должно быть. Из-за этого база данных обновляется A LOT . Возможно, я мог бы вытолкнуть значения, которые передаются второй функции после ее завершения, но я хотел бы знать, почему это происходит.
class Sub:
def __init__(self, parent, scan_type):
self.database = ConnectionToDatabase()
self.database_name = ConnectionToDatabase().database_name()
def scan_folder(self):
connection = sqlite3.connect(self.database_name)
try:
cursor = connection.cursor()
for file_name in os.listdir(self.parent):
if file_name.endswith('.srt'):
if self.scan_type is True:
cursor.execute('SELECT count(*) FROM subs WHERE name = ?', (file_name,))
else:
current_path = "".join((self.parent, "/", file_name))
if os.path.isdir(current_path):
dot = Sub(current_path, self.scan_type)
# I THINK HERE IS THE ERROR, ACCORDING TO PYCHARM DEBUGGER
# HERE THE update_db() IS CALLED AND ONLY AFTER IT FINISHES, dot.scan_folder() BEGINS
dot.scan_folder()
connection.close() # Closes connection that adds subtitle names into the database
finally:
self.database.update_database(dirty_files_amount)
Здесь начинается вторая функция:
class ConnectionToDatabase:
def __init__(self):
self.database = './sub_master.db'
def update_database(self, dirty_files_amount):
connection_update = sqlite3.connect(self.database)
cursor = connection_update.cursor()
for sub_name in to_update:
cursor.execute('UPDATE subs SET ad_found = 1 WHERE name = ?', (sub_name,))
connection_update.commit()
connection_update.close()