def insert_hashes(self, sid, hashes): """ Insert series of hash => song_id, offset values into the database. """ values = [] for hash, offset in hashes: values.append((hash, sid, offset)) with self.cursor() as cur: for split_values in grouper(values, 1000): cur.executemany(self.INSERT_FINGERPRINT, split_values)
def return_matches(self, hashes): """ Return the (song_id, offset_diff) tuples associated with a list of (sha1, sample_offset) values. """ # Create a dictionary of hash => offset pairs for later lookups mapper = {} for hash, offset in hashes: mapper[hash] = offset # Get an iteratable of all the hashes we need values = mapper.keys() for split_values in grouper(values, 900): results = self._DBSession.query(Fingerprint.hash, Fingerprint.song_id, Fingerprint.offset).filter(Fingerprint.hash.in_(split_values)) for hash, sid, offset in results: # (sid, db_offset - song_sampled_offset) yield (sid, offset - mapper[hash])
def return_matches(self, hashes): """ Return the (song_id, offset_diff) tuples associated with a list of (sha1, sample_offset) values. """ # Create a dictionary of hash => offset pairs for later lookups mapper = {} for hash, offset in hashes: mapper[hash] = offset # Get an iteratable of all the hashes we need values = mapper.keys() with self.cursor() as cur: for split_values in grouper(values, 1000): # Create our IN part of the query query = self.SELECT_MULTIPLE query = query % ', '.join(['UNHEX(%s)'] * len(split_values)) cur.execute(query, split_values) for hash, sid, offset in cur: # (sid, db_offset - song_sampled_offset) yield (sid, offset - mapper[hash])