Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将单个Json文件数据保存到同一SQL DB中的两个不同表中_Python_Mysql_Json_List_Dictionary - Fatal编程技术网

Python 将单个Json文件数据保存到同一SQL DB中的两个不同表中

Python 将单个Json文件数据保存到同一SQL DB中的两个不同表中,python,mysql,json,list,dictionary,Python,Mysql,Json,List,Dictionary,我需要将json文件数据保存到mysql数据库中。目前,mysql db mydb包含表1和表2。需要将数据json文件的一部分保存到表1,另一部分保存到表2。每个表1和表2都已创建 下面是json数据文件的示例 { "response": { "dev_log": { "data": [ { "id": "1", "timestamp": "2020-01-16 10:11:12", "emai

我需要将json文件数据保存到mysql数据库中。目前,mysql db mydb包含表1和表2。需要将数据json文件的一部分保存到表1,另一部分保存到表2。每个表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的所有值都应该保存在mydb数据库的表1和表2上

下面是起草的代码

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

我非常感谢您的帮助,并建议我如何进一步执行


感谢大家

Json只是一种文本表示,所以您应该首先将其加载到Python对象(dict和list)中。完成后,
data['response']['dev_log']['data']
是一个不错的dict列表,就像
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'])

如何将数据保存到sql中?您好,先生,我尝试将json字符串转换为python字典,它返回错误'ValueError:应为属性名:第22行第5列(char 466)'。。。。这是我将代码转换为dict-->的代码,打开('datfile.json','r')为f:datDict=json。由于逗号原因,加载(f)打印(datDict)…json正常。。现在…为了将数据获取到sql表服务器,我使用了“datDict”。。。get error==>pymysql.err.ProgrammingError:(1064,u“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解可在第1行使用的正确语法::id,:timestamp,:email);@chenoi:我只使用SQLite3对其进行了测试,而我不使用MySQL。参数化查询可能有不同的语法。您确实应该查看MySQL服务器手册,以找到将命名参数传递给查询的确切语法。我已经更新了上面的代码,并且能够运行,没有错误,但db返回空值。是sql命令不正确吗?结果是否为空值?