Я использую sqlite с python. Я реализую протокол POP3. У меня есть таблицаСравнение значений sql
msg_id text date text from_sender text subject text body text hashkey text
Теперь мне нужно, чтобы проверить наличие дубликатов сообщений, проверяя идентификатор сообщения сообщения извлеченного против существующих MSG_ID лет в таблице. Я зашифровал msg_id с помощью md5 и поместил его в столбец hashkey. Всякий раз, когда я получаю почту, я использую идентификатор сообщения и проверяю его со значениями таблицы. Вот что я делаю.
def check_duplicate(new): conn = sql.connect("mail") c = conn.cursor() m = hashlib.md5() m.update(new) c.execute("select hashkey from mail") for row in c: if m.hexdigest() == row: return 0 else: continue return 1
Он просто отказывается работать правильно. Я попробовал напечатать значение строки, он показывает его в unicode, вот в чем проблема, поскольку он не может сравниться должным образом.
Есть ли лучший способ сделать это или улучшить мой метод?
Просто любопытно - почему вы хэшируете поле msg_id перед выполнением сравнения? Есть ли какая-то причина, по которой вы не можете сравнить msg_id? –
@Bob: O (1) для каждого сравнения с существующими строками в таблице. (Вместо O (n).) Это известно как интернирование строк, см. Http://en.wikipedia.org/wiki/String_interning. –
Также: MD5 - это алгоритм хеширования, а не «шифрование». Вы хешируете 'msg_id', а не шифруете его. –