【发布时间】:2011-05-11 14:59:12
【问题描述】:
我在 python 中使用 sqlite。我正在实现 POP3 协议。我有一张桌子
msg_id 文本 日期文本 from_sender 文本 主题文本 文章主体 哈希键文本现在我需要通过对照表中现有的 msg_id 检查检索到的消息的消息 ID 来检查重复消息。我使用 md5 加密了 msg_id 并将其放在 hashkey 列中。每当我检索邮件时,我都会对邮件 ID 进行哈希处理并使用表值进行检查。这就是我的工作。
def check_duplicate(新): conn = sql.connect("邮件") c = conn.cursor() m = hashlib.md5() m.update(新) c.execute("从邮件中选择 hashkey") 对于 c 中的行: 如果 m.hexdigest() == 行: 返回 0 别的: 继续 返回 1它只是拒绝正常工作。我尝试打印行值,它以 unicode 显示,这就是问题所在,因为它无法正确比较。
有没有更好的方法来做到这一点,或者改进我的方法?
【问题讨论】:
-
只是好奇 - 为什么在进行比较之前对 msg_id 字段进行哈希处理?有什么原因你不能比较 msg_id 的吗?
-
@Bob: O(1) 与表中现有字符串的每次比较。 (而不是 O(n)。)这称为实习字符串,请参阅:en.wikipedia.org/wiki/String_interning。
-
另外:MD5 是一种哈希算法,而不是“加密”。您正在对
msg_id进行哈希处理,而不是对其进行加密。