Сохранить данные одного Json файла в 2 разных таблицах в одной и той же SQL БД - PullRequest
0 голосов
/ 11 марта 2020

Мне нужно сохранить данные json файла на mysql дБ. В настоящее время mysql db mydb с таблицами1 и таблицами2. Необходимо сохранить некоторую часть файла данных json в table1, а другую в table2. Каждая таблица1 и таблица2 были созданы.

Ниже приведен пример json файла данных

{
  "response": {
    "dev_log": {
      "data": [
        {
          "id": "1",
          "timestamp": "2020-01-16 10:11:12",
          "email": "johnd@gmail.com"
        },
        {
          "id": "2",
          "timestamp": "2020-02-27 15:33:34",
          "email": "zack@gmail.com"
        },
        {
          "id": "3",
          "timestamp": "2020-02-27 15:34:07",
          "email": "edy@yahoo.com"
        }
      ],
      "total_dev_log": "1423"
    },
    "client_log": {
      "data": [
        {
          "customer_city": "LONDON",
          "customer_login": "AAAAAAAAAAAAAA",
          "customer_state": "MC",
          "details": "aaaaaaaaaaa-bbbbbbbbbbbbbbb-cccccccccccccc ",
          "log_number": "1",
          "dept": "Sales",
          "staff_id": "S123",
          "staff_name": "EricY",
          "timestamp": "2020-02-27 15:57:24"
        },
        {
          "customer_city": "SINGAPORE",
          "customer_login": "BBBBBBBBBBBBB",
          "customer_state": "XX",
          "details": "ddddddddd-eeeeeeeeeeee-ffffffffffff ",
          "log_number": "1",
          "dept": "Eng",
          "staff_id": "S456",
          "staff_name": "YongG",
          "timestamp": "2020-02-27 15:57:24"
        }
      ],
      "total_hero_query": "13"
    },
    "response_time": "0.723494",
    "transaction_id": "909122",
    "transaction_status": "OK",
    "transaction_time": "Fri Feb 28 15:27:51 2020"
  }
}

Здесь ... в json у нас есть 'dev_log' и 'client_log'. Таким образом, все значения dev_log должны быть сохранены в table1 и client_log в table2 базы данных mydb.

Составленный ниже код

import pymysql
import os
import json
#import ast

#Read Json string file
with open('datfile.json', 'r') as f:
   datDict = json.load(f)

#connect to MySQL
con = pymysql.connect(host = 'localhost',user = 'root',passwd = 'root',db = 'mydb')
cursor = con.cursor()

#Parse data to SQL insert
#for i, item in enumerate(datDict):
    #id = ("id", None)
    #timestamp = ("timestamp", None)
    #email = ("email", None)

    #cursor.execute("INSERT INTO mytable (id,   timestamp,   email) VALUES (%s,    %s,     %s)", (id,  timestamp,   email))
cursor.executemany("""INSERT INTO table1 VALUES(id, timestamp, email)""", datDict['response']['dev_log']['data'])
con.commit()
con.close()

Я не уверен, как сохранить файл в sql и еще в две разные таблицы. На данный момент ... я могу запустить код без каких-либо ошибок, но вернуть нулевое значение, как показано ниже;

mysql> SELECT * FROM table1;
+------+-----------+-------+
| id   | timestamp | email |
+------+-----------+-------+
| NULL | NULL      | NULL  |
| NULL | NULL      | NULL  |
| NULL | NULL      | NULL  |
+------+-----------+-------+
3 rows in set (0.00 sec)

База данных mydb и таблица table1 созданы.

Я очень ценю вашу помощь и посоветуйте, как мне выполнить дальше.

Спасибо всем

1 Ответ

0 голосов
/ 11 марта 2020

Json - это только текстовое представление, поэтому сначала необходимо загрузить его в Python объекты (дикты и списки). На этом все, data['response']['dev_log']['data'] - это хороший список диктов, как и data['response']['client_log']['data'].

Так что вы должны иметь возможность использовать запросы, близкие к:

data = json.load(jsonfile)
...
curs = con.cursor()    # con is a connection to your database...
curs.executemany("""INSERT INTO dev VALUES(:id, :timestamp, :email)""",
    data['response']['dev_log']['data'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...