【发布时间】:2014-11-25 12:50:09
【问题描述】:
我有一个包含一列文件名的 sqlite 表。有些文件名与其他文件重复,所以我想遍历每一行,在列中搜索类似条目,然后将这些结果打印到控制台。
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 where files like 'my_name%'时,您将返回my_name1。我不确定您项目的目标是什么,但您应该注意这一点,以免给您带来更多问题。