|
|
import sqlite3import osimport reimport update# https://stackoverflow.com/a/5365533osp = os.pathDB_PATH = osp.join(osp.dirname(__file__),'ext.db')ext_database = sqlite3.connect(DB_PATH)def init_db(): cur = ext_database.cursor() cur.execute('CREATE TABLE "updates" ( `ext` TEXT, `update_time` INTEGER, `file_count` INTEGER, PRIMARY KEY(`ext`) )')def regexp(expr, item): return re.search(expr,item) is not Noneext_database.create_function("REGEXP", 2, regexp)class Searcher: def __init__(self,ext): self.cur = ext_database.cursor() self.ext = ext self.index = '{}_index'.format(ext) self.__init_table__() def __init_table__(self): self.cur.execute('CREATE TABLE IF NOT EXISTS ? (`name` TEXT,`fullpath` TEXT,UNIQUE(name,fullpath));',[self.ext]) self.cur.execute('CREATE INDEX IF NOT EXISTS ? ON ? ( `name`, `fullpath` )',[self.index,self.ext]) def _update_(self,update_mtimes): # update logic self.cur.executemany('INSERT OR IGNORE INTO ? VALUES (?,?)',params) self.cur.execute('INSERT INTO updates VALUES (?, ?, ?)',[self.ext,time,count]) def _commit_(self): ext_database.commit() def search(query,regex=False): if regex: self.cur.execute('SELECT * FROM ? WHERE name REGEXP ?',[self.ext,query]) else: self.cur.execute('SELECT * FROM ? WHERE name LIKE ?',[self.ext,query]) return self.cur.fetchall()
|