【问题标题】:mysql.connector select query with binary valuesmysql.connector 使用二进制值选择查询
【发布时间】:2014-07-26 23:50:04
【问题描述】:

使用 Python 的 mysql.connector,如何选择匹配元组的所有记录?

例如:

ids = (b'6TRsHMzWSrq0zeembo0Vbg',
       b'7Qoq53lKTk-RZOi830t3MA', 
       b'7ZGO9S3DTcGHjwrfpV0E0A')

然后查询会执行以下操作:

query = SELECT first_name
        FROM users
        WHERE id = (ids)

返回 ID 出现在元组中的所有用户的记录

【问题讨论】:

  • 什么是b?它是 Python 的东西吗?
  • 是的,它是一个二进制值

标签: python mysql mysql-connector-python


【解决方案1】:

尝试这样做

query = "SELECT first_name FROM users WHERE id IN " + str(list(ids))
cursor.execute(query)

再想一想,以下也应该有效

query = "SELECT first_name FROM users WHERE id IN " + str(ids)

编辑

OP 在 cmets 中提到 id 是从先前查询返回的二进制数据。在这种情况下,从this answer 获取提示并使用BINARY 运算符,以下查询应该可以工作

query = "SELECT first_name FROM users WHERE BINARY id IN " + str(ids) ;

【讨论】:

  • 在将二进制值转换为字符串时遇到问题...我应该将它们解码为 utf-8 吗?
  • @ensnare ids 元组中有哪些数据?它看起来不像二进制。无论如何,看看structs 模块将字符串从二进制转换为整数。
  • ids 元组包含从先前查询返回的二进制(区分大小写)值的元组。有没有办法在没有转换的情况下做到这一点?
  • @ensnare 检查我的编辑。让我知道他们是否有效。如果没有,您可能需要为 id 生成 hexcode 并检查十六进制代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多