Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query a multi-level JSON object stored in MySQL

I have a JSON column in a MySQL table that contains a multi-level JSON object. I can access the values at the first level using the function JSON_EXTRACT but I can't find how to go over the first level.

Here's my MySQL table:

CREATE TABLE ref_data_table (
    `id` INTEGER(11) AUTO_INCREMENT NOT NULL, 
    `symbol` VARCHAR(12) NOT NULL, 
    `metadata` JSON NOT NULL,
    PRIMARY KEY (`id`)
); 

Here's my Python script:

import json 
import mysql.connector 

con = mysql.connector.connect(**config) 
cur = con.cursor() 

symbol = 'VXX'
metadata = {
    'tick_size': 0.01, 
    'data_sources': {
        'provider1': 'p1', 
        'provider2': 'p2',
        'provider3': 'p3'
    },
    'currency': 'USD'
}
sql = \
    """
    INSERT INTO ref_data_table (symbol, metadata) 
    VALUES ('%s', %s);
    """
cur.execute(sql, (symbol, json.dumps(metadata)))
con.commit()

The data is properly inserted into the MySQL table and the following statement in MySQL works:

SELECT symbol, JSON_EXTRACT(metadata, '$.data_sources') 
FROM ref_data_table
WHERE symbol = 'VXX';

How can I request the value of 'provider3' in 'data_sources'?

Many thanks!

like image 791
agiap Avatar asked Sep 15 '25 10:09

agiap


1 Answers

Try this:

'$.data_sources.provider3'

SELECT symbol, JSON_EXTRACT(metadata, '$.data_sources.provider3) 
FROM ref_data_table
WHERE symbol = 'VXX';
like image 148
Merlin Avatar answered Sep 18 '25 10:09

Merlin