基本上,我有一个像这样的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中,以下两行有效:
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")
然而,当参数化时,这2个不会:
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))
有人可以向我解释为什么以及如何解决这个问题?谢谢!
答案 0 :(得分: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))
请注意占位符周围没有引号 - 如果需要,数据库驱动程序会自动放置它。