2016-06-13 16 views
1

基本上,我有一個MySQL表是這樣的:MySQL的Python的查詢單獨工作,但失敗時的參數

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)) 

有人可以向我解釋爲什麼以及如何解決它?謝謝!

回答

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)) 

注意周圍根本沒有佔位符引號 - 數據庫驅動程序會自動把它如果需要的話。

+0

非常感謝,alecxe! – agiap