Python 将单个Json文件数据保存到同一SQL DB中的两个不同表中
我需要将json文件数据保存到mysql数据库中。目前,mysql db mydb包含表1和表2。需要将数据json文件的一部分保存到表1,另一部分保存到表2。每个表1和表2都已创建 下面是json数据文件的示例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
{
"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命令不正确吗?结果是否为空值?