【问题标题】:Build SQL query with long hex strings in Python在 Python 中使用长十六进制字符串构建 SQL 查询
【发布时间】: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


【解决方案1】:

基于@Alex 评论:

“SELECT... IN (x'" + str("', x'".join(hashes)) + "');”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 2010-09-21
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多