【问题标题】:MySQL Python query works alone but fails when parameterizedMySQL Python 查询单独工作,但在参数化时失败
【发布时间】:2016-06-13 15:27:56
【问题描述】:

基本上,我有一个这样的 MySQL 表:

CREATE TABLE markets (
    id INTEGER AUTO_INCREMENT NOT NULL,
    root_symbol VARCHAR(64) NOT NULL, 
    metadata JSON NOT NULL, 
    PRIMARY KEY (id)
);

元数据列包含如下 JSON 文档:

metadata = {
    'tick_size': 0.01, 
    'currency': 'USD'
}

在 Python 中,以下 2 行有效:

cur.execute("SELECT root_symbol FROM markets WHERE JSON_EXTRACT(metadata, '$.currency') = 'USD'")
cur.execute("SELECT root_symbol FROM markets WHERE JSON_EXTRACT(metadata, '$.tick_size') = 0.25")

然而,当参数化时,这两个不会:

cur.execute("SELECT root_symbol FROM markets WHERE JSON_EXTRACT(metadata, '$.%s') = %s", ('currency', "USD"))
cur.execute("SELECT root_symbol FROM markets WHERE JSON_EXTRACT(metadata, '$.%s') = %s", ('tick_size', 0.25))

有人可以向我解释为什么以及如何解决它吗?谢谢!

【问题讨论】:

    标签: python mysql json


    【解决方案1】:

    您需要为JSON_EXTRACT() 参数化整个字段值:

    cur.execute("""
       SELECT root_symbol 
       FROM markets 
       WHERE JSON_EXTRACT(metadata, %s) = %s""", ('$.currency', "USD"))
    
    cur.execute("""
       SELECT root_symbol 
       FROM markets 
       WHERE JSON_EXTRACT(metadata, %s) = %s""", ('$.tick_size', 0.25))
    

    请注意占位符周围没有引号 - 如果需要,数据库驱动程序会自动添加它。

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2023-03-27
      相关资源
      最近更新 更多