У меня есть таблица sqlite, содержащая столбец имен файлов. Некоторые имена файлов являются дубликатами других файлов, поэтому я хотел бы перебирать каждую строку, искать столбцы для похожих записей и печатать эти результаты на консоли.Почему второй оператор SQL нарушает мой цикл?
A print(row[0])
указывает, что первая половина цикла findDupes
работает, итерации по каждой строке. Вещи становятся странными, когда я делаю еще один оператор sqlite, чтобы найти похожие записи и распечатать вывод. Вместо того, чтобы продолжать цикл, цикл печатает только первую запись.
Я не эксперт по SQL, поэтому я не знаю, что я делаю неправильно. Любая помощь будет принята с благодарностью. Благодаря!
def getFiles():
dirs = os.listdir(path)
for files in dirs:
c.execute('INSERT INTO myTable(files) VALUES(?)', (files,))
def findDupes():
row = c.execute('select files from myTable order by files')
while True:
row = c.fetchone()
if row == None:
break
c.execute('select files from myTable where files like ?',(row[0]+'%',))
dupe = c.fetchone()
print (dupe[0])
Вы должны использовать новый курсор для вашего второго выбора. –
Чтобы быть понятным, глядя на запрос, вы будете не только выбирать дубликаты, но и все, что имеет это имя в качестве префикса.Поэтому, если в вашей таблице есть как 'my_name', так и' my_name1', когда вы вызываете запрос 'select files from myTable, где такие файлы, как 'my_name%'' , вы вернете 'my_name1'. Я не знаю, какова цель вашего проекта, но вы должны знать об этом, чтобы не дать вам больше проблем. – JB333