首页 文章

比较sql值

提问于
浏览
0

我正在使用sqlite和python . 我正在实施POP3协议 . 我有一张 table

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显示,这就是问题所在,因为它无法正确比较 .

有没有更好的方法来做到这一点,或改善我的方法?

3 回答

  • 0

    好吧,如果您唯一的问题是比较,那么您可以尝试:

    if m.hexdigest() == row[0]:
    

    因为 row 是元组而不是字符串,但你的基本策略对我来说似乎不对 . 您正在为数据库中的每一行检索 hashkey ,然后自己搜索正确的行 . 使数据库更好地搜索你 . 数据库可能更适合搜索(因为它可能在 hashkey 字段上有一个索引 - 你确实为这个字段创建了一个索引,不是吗?)它只需要向你发送一个结果,从而节省时间 . 所以你可以发出这样的查询来确定消息是否存在:

    m.execute('select exists(select * from mail where hashkey=?)', m.hexdigest())
    

    风格的最后一点:Python有 TrueFalse ,所以没有必要使用 10 作为布尔值 .

  • 0

    可能会想让MySQL搜索哈希键:

    select count(*) from mail where hashkey = 'TheHashKey'
    
  • 3

    主要问题是你试图将Python字符串( m.hexdigest() )与元组进行比较 .

    另外,另一张海报's suggestion that you use SQL for the comparison is probably good advice. Another SQL suggestion would be to fix your columns -- TEXT for everything probably isn' t你想要的; hashkey 列上的索引很可能是一件好事 .

相关问题