我使用python与sqlite。我正在实施POP3协议。我有一个表比较sql值
msg_id text date text from_sender text subject text body text hashkey text
现在我需要通过检查对现有MSG_ID的表中检索到的消息的消息ID是否有重复的邮件。我使用md5加密了msg_id并将其放入hashkey列中。每当我检索邮件时,我都会对邮件ID进行哈希处理,并使用表值对其进行检查。继承人我做了什么。
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的? – 2010-11-17 19:25:39
@Bob:O(1)与表中现有的字符串进行比较。 (而不是O(n))。这被称为实习字符串,参见:http://en.wikipedia.org/wiki/String_interning。 – 2010-11-17 19:29:08
另外:MD5是散列算法,不是“加密”。你正在对'msg_id'进行哈希处理,而不是对它进行加密。 – 2010-11-17 19:30:39