提问者:小点点

使用Python脚本将issue while Json文件导入Mysql db


我已经创建了用于在mysql中创建表的python脚本,并将json文件导入到mysql DB中。我在下面分享了

Json文件

{“ansible_facts”:{“ansible_network_resources”:{“l3_interfaces”:[{“name”:“GigabitEthernet0/0”},{“name”:“GigabitEthernet0/0.100”,“IPv4”:[{“address”:“172.1.1.1 255.255.255.252”}]},{“name”:“GigabitEthernet0/0.101”,“IPv4”:[{“address”:“172.1.1.1 255.255.255.252”}]},{“name”:“GigabitEthernet0/1”,“IPv4”:[{“

# Table creation in mysql db
import mysql.connector
mydb = mysql.connector.connect( host="IPaddress", user="user", password="pw", database="db")
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE Routers (ansible_net_hostname NVARCHAR(255), ansible_net_model NVARCHAR(255), ansible_network_resources NVARCHAR(255))")

# Importing Json file into Mysql - Python script
import json, pymysql
json_data=open("L3_out.json").read()
json_obj=json.loads(json_data)
con=pymysql.connect(host="IPaddress", user="user", password="pw", database="db")

cursor=con.cursor()
for item in json_obj:
    ansible_net_hostname=item.get("ansible_net_hostname")
    ansible_net_model=item.get("ansible_net_model")
    ansible_network_resources=item.get("ansible_network_resources")
    cursor.execute("insert into Routers(ansible_net_hostname,ansible_net_model,ansible_network_resources) value(%s,%s,%s)",(ansible_net_hostname,ansible_net_model,ansible_network_resources)
con.commit()
con.close()

共1个答案

匿名用户

首先,我们不清楚

for item in json_obj:
    ansible_net_hostname=item.get("ansible_net_hostname")

工作。因为在你的例子中'item'是字典中的键。在您显示的文件中,只有一个根键“ansible_facts”。所以您正在尝试对字符串调用get()。要获取“Ansible_Network_Resources”的数据,请执行以下操作:

for key in json_obj:
    ansible_network_resources=json_obj[key].get("ansible_network_resources")