我使用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