@Maxim045

Почему база данных SQLite остается пустой(код на Python)?

Уже задавал такой вопрос, но теперь немного изменил код. Ошибка не пропала.
База данных SQLite должна заполняться тегами MP3-файлов. Но этого не происходит. Думаю, ошибка в теле функции extract_tags. Если убрать конструкцию if not record...else... и просто оставить заполнение через INSERT, код работает. Пожалуйста, подскажите, где допустил ошибку?
import mutagen
import datetime

import os
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
# import pygame

import sqlite3
from mutagen.id3 import ID3
from tkinter import *
from tkinter.filedialog import askdirectory

con = sqlite3.connect("tagsdatabase.db")
cur = con.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS tags_db(Path TEXT,
                                                  Song_Title TEXT,
                                                  Album_Title TEXT,
                                                  Song_Artist TEXT,
                                                  Album_Artist TEXT,
                                                  Year_of_Publishing INTEGER,
                                                  Track_Number INTEGER,
                                                  Length REAL,
                                                  Bitrate INTEGER)''')
con.commit()

root = Tk()
root.minsize(300, 300)


def extract_tags(path: str) -> list:
    '''Функция получает путь до MP3-файла, извлекает из него теги и заполняет ими базу данных.'''

    audiofile = mutagen.File(path)

    if audiofile.tags:

        song_title_s = audiofile.tags.getall('TIT2')
        song_title = str(song_title_s[0]) if song_title_s else None
        # Метод извлекает из MP3-файла название композиции

        album_title_s = audiofile.tags.getall('TALB')
        album_title = str(album_title_s[0]) if album_title_s else None
        # Метод извлекает из MP3-файла название альбома

        song_artist_s = audiofile.tags.getall('TPE1')
        song_artist = str(song_artist_s[0]) if song_artist_s else None
        # Метод извлекает из MP3-файла имя исполнителя композиции

        album_artist_s = audiofile.tags.getall('TPE2')
        album_artist = str(album_artist_s[0]) if album_artist_s else None
        # Метод извлекает из MP3-файла имя исполнителя альбома

        year_of_publishing_s = audiofile.tags.getall('TDRC')
        year_of_publishing = str(year_of_publishing_s[0]) if year_of_publishing_s else None
        # Метод извлекает из MP3-файла имя исполнителя альбома

        track_number_s = audiofile.tags.getall('TRCK')
        track_number = str(track_number_s[0]) if track_number_s else None
        # Метод извлекает из MP3-файла порядковый номер композиции

        length = str(datetime.timedelta(seconds = audiofile.info.length))
        # Метод извлекает из MP3-файла длину композиции

        bitrate = audiofile.info.bitrate
        # Метод извлекает из MP3-файла битрейт композиции

    song_tags = (path, song_title, album_title, song_artist, album_artist, year_of_publishing, track_number, length, bitrate)

    record = cur.execute('SELECT * FROM tags_db WHERE Path=?', (path, ))

    if not record:
        cur.execute('INSERT INTO tags_db VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)', song_tags)
    else:
        cur.execute('UPDATE tags_db SET Song_Title=?, Album_Title=?, Song_Artist=?, Album_Artist=?, Year_of_Publishing=?, Track_Number=?, Length=?, Bitrate=?  WHERE Path=?', (song_title, album_title, song_artist, album_artist, year_of_publishing, track_number, length, bitrate, path))

    con.commit()


def choose_files(directory: str) -> None:
    '''Функция получает путь к директории, отбирает MP3-файлы, применяет extract_tags к каждому из них.'''
    for file in os.listdir(directory):
        if file.endswith(".mp3"):
            path = os.path.realpath(file)
            extract_tags(path)


def choose_directory(event) -> None:
    '''Функция открывает диалоговое окно выбора директории с MP3-файлами'''
    directory = askdirectory()
    os.chdir(directory)
    choose_files(directory)

    # exit()


choosedirectory = Button(root, text = 'Choose Directory')
choosedirectory.pack()
choosedirectory.bind("<Button-1>", choose_directory)

root.mainloop()
  • Вопрос задан
  • 226 просмотров
Решения вопроса 1
@anerev
Попробуй так:
cur.execute('SELECT * FROM tags_db WHERE Path=?', (path, ))

if cur.fetchone():
	cur.execute('UPDATE tags_db SET Song_Title=?, Album_Title=?, Song_Artist=?, Album_Artist=?, Year_of_Publishing=?, Track_Number=?, Length=?, Bitrate=?  WHERE Path=?', (song_title, album_title, song_artist, album_artist, year_of_publishing, track_number, length, bitrate, path))
else:
	cur.execute('INSERT INTO tags_db VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)', song_tags)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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