我有一個包含一列文件名的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])
你應該用你的第二個選擇新的光標。 – 2014-09-30 19:32:04
要清楚,查看查詢,您不僅可以選擇重複項,而且還可以選擇以該文件名作爲前綴的任何項。因此,如果你的表中有'my_name'和'my_name1',當你調用查詢'從myTable中選擇文件'my_name%'' '時,你將返回'my_name1'。我不確定你的項目的目標是什麼,但你應該意識到這一點,以免它給你帶來更多的問題。 – JB333 2014-09-30 20:11:07