【发布时间】:2017-12-20 10:57:30
【问题描述】:
我将 md5 哈希数组作为十六进制字符串:
hashes = ['abcdefabcdefabcdef', '12f456789012345678', 'acd24ef6dcbe98753a']
我需要构建一个 SQL 查询来通过哈希查找记录。如果我手动创建查询,它看起来像这样"SELECT * FROM mytable WHERE hash IN (x'abcdefabcdefabcdef', x'12f456789012345678', x'acd24ef6dcbe98753a')"
对于单个哈希,我会使用字符串格式,例如 "SELECT * ... WHERE md5 = x'%s'" % hash
但是我不知道如何在 Python 中使用数组转换来构建查询,以将其放入 sqlite3 的 cursor.execute() 方法中。
【问题讨论】:
-
我不清楚,为什么不能使用循环遍历哈希?就像每个哈希调用 cursor.execute([query with current hash]).
-
@Alex 首先,一个 execute() 调用似乎比在循环中调用 execute() 更有效。其次,使用循环构建查询不是问题,我只是想知道是否可以在 Python 中使用更优雅的方式使用长十六进制字符串构建查询。
-
好吧,我还是没有找到根本问题。您描述了使用 IN 子句的好方法,为什么它对您不起作用?要进行此查询,您只需要 "select... in (x'" + str(hashes.join(',x')) + "');" - 比执行。您想在这里进行什么样的优雅调整?
-
@Alex 谢谢。其实我不是 Python 程序员,所以你描述的解决方案似乎是我正在寻找的解决方案。稍加修正后,它看起来像:"(x'" + str("', x'".join(hashes)) + "')"
标签: python sql arrays sqlite hex