Добавлена процедура поиска и удаления дубликатов.
authorRoman Bazalevsky <rvb@rvb.name>
Sat, 5 Apr 2014 11:12:51 +0000 (15:12 +0400)
committerRoman Bazalevsky <rvb@rvb.name>
Sat, 5 Apr 2014 11:12:51 +0000 (15:12 +0400)
db.py
fb2_process.py

diff --git a/db.py b/db.py
index 84a999dca328d142b1703b5f0fb507a9e8877ae1..a39c1603913a4b5a03ecd47045a659c01a723927 100644 (file)
--- a/db.py
+++ b/db.py
@@ -197,6 +197,25 @@ def ListByFormat(format,limit=100):
     print "No connection to DB"
     exit()
 
+def ListDups(limit=100):
+  if database:
+    c = database.cursor()
+    c.execute('SELECT b.title,l.author,max(b.id) id FROM metadata.books b,metadata.books_authors_link l where b.id=l.book group by b.title,l.author having count(*)>%s',(limit))
+    return c.fetchall()
+  else:
+    print "No connection to DB"
+    exit()
+
+def ListByTitleAndAuthor(title,author,id=0):
+  if database:
+    c = database.cursor()
+    c.execute('SELECT b.id FROM metadata.books b,metadata.books_authors_link l where b.id=l.book and b.title=%s and l.author=%s and b.id<>%s',(title,author,id))
+    return c.fetchall()
+  else:
+    print "No connection to DB"
+    exit()
+
 def Commit():
   if database:
     database.commit()
index 38d8876e863cd2256f7a6865793d22e919de2498..d8c01c18260c8a4b2cfa12de515a7038ed157c9a 100755 (executable)
@@ -279,7 +279,21 @@ def CheckFiles(delete = 0):
         db.DelBook(id)
         db.Commit()
 
+def RemoveDups(limit = 100):
+  if limit<2:
+    return
+  id_to_del=set([]) 
+  recs = db.ListDups(limit);
+  for rec in recs:
+    ids = db.ListByTitleAndAuthor(rec[0],rec[1],rec[2])
+    for id in ids:
+      id_to_del.add(id)
+  for id in id_to_del:
+    print "\r Deleting %s..." % (id)
+    DelBook(id)
+
 def main():
+  print "Processing...\r"
   ProcessDir(db.tmp_files)
   CompressAll(2000)