Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

insert JSON values into a MySQL table using python

I have a JSON file recover from requests.get

here is some of my JSON:

 [{"order":{"id":"B4589B26","status_order_id":5,"status_order_name":"Sent","customer_id":326
"order_products":[{"order_product":{"id":96218,"order_id":96538,"product_id":59320,}}],"customer_email":"[email protected]","customer_company":"SARL","customer_name":"user user", .....

here is my code:

token = "xxxx"

r = requests.get('url', auth=('[email protected]', token))

mydb = pymysql.connect(host='localhost',
user='root',
passwd='user',
db='ytm_db')

cursor = mydb.cursor()

data = r.json()
json_obj = json.loads(r)

for ord in json_obj["order"]:
    print("id:", ord["id"])
    print("status_id:", ord["status_order_id"])
    print('---')
    cursor.execute("INSERT INTO table_test (id, status_order_id, customer_id) VALUES (%s,%s,%s)", (ord["id"], ord["status_order_id"], ord["customer_id"]))

#close the connection to the database.
mydb.commit()
cursor.close()
print ("Done")

I have this error:

    'not {!r}'.format(s.__class__.__name__))
TypeError: the JSON object must be str, bytes or bytearray, not 'Response'
like image 730
user_1330 Avatar asked Mar 06 '23 17:03

user_1330


2 Answers

You do not need this line json_obj = json.loads(r) . r.json() returns you a json response.

Ex:

json_obj = r.json()

for ord in json_obj["order"]:
    print("id:", ord["id"])
    print("status_id:", ord["status_order_id"])
    print('---')
    cursor.execute("INSERT INTO table_test (id, status_order_id, customer_id) VALUES (%s,%s,%s)", (ord["id"], ord["status_order_id"], ord["customer_id"]))

#close the connection to the database.
mydb.commit()
cursor.close()
like image 148
Rakesh Avatar answered Mar 15 '23 17:03

Rakesh


This is the right solution :

json_obj = r.json()

for ord in json_obj:
    print("id:", ord["order"]["id"])
    print("status_id:", ord["order"]["status_order_id"])
    print('---')
    cursor.execute("INSERT INTO table_test (id, status_order_id, customer_id) VALUES (%s,%s,%s)", (ord["order"]["id"], ord["order"]["status_order_id"], ord["order"]["customer_id"]))

#close the connection to the database.
mydb.commit()
cursor.close()
like image 27
user_1330 Avatar answered Mar 15 '23 16:03

user_1330