write multiple foods to DB from JSON












0















I am currently having major issues writing foods from a JSON to my database. The GET method works just fine. However, when I receive a JSON, it is not properly writing to the database.



What I do is the following




  • Write a new meal to the database (creates a new meal/cart id via autoincrement)

  • Utilize the LAST_INSERT_ID() command to write new foods to that meal/cart.


Once I get here writing one food is fine, however if there is numerous foods, I can't seem to get it to write the other foods from the JSON to the database.



The JSON I am receiving is as follows:



Endpoint: /meallog
Request params:{
method: ”post”,
headers: headers,
url: string,
data:{
userId: string,
date: string,
mealData:{
mealName: String,
food: [
{
id:string,
foodname:string,
numCal:int,
servingSize:int,
servingSizeUnit:string,
totalCalories:int
},
{
(repeat above)
}
]
}

}
}
Response: (JSON Object)
{
code: 200/400,
message: String
}


The Code I currently have for my post is below:



elif request.method == 'POST':
jsondata = {}
code={}

user_id = request.json['user_id']
date = request.json['date']
mealName = request.json['mealName']
food_id = request.json['id']
food_name = request.json['foodname']
food_cal = request.json['numCal']
serving_size = request.json['servingSize']
serving_unit = request.json['servingSizeUnit']
totalCal = request.json['totalCalories']

postmeal = conn.cursor()
INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_cal, cart_name) VALUES (%s, %s, %s, %s);"
postmeal.execute(INS_meal, (user_id, date, totalCal, mealName))
conn.commit()

postfood = conn.cursor()
INS_food = "INSERT INTO food_log VALUES (LAST_INSERT_ID(), %s, %s, %s, %s, %s);"
postfood.execute(INS_food, (food_id, food_name, food_cal, serving_size, serving_unit))
conn.commit()

if postfood.execute and postmeal.execute:
code['code'] = '200'
code['message'] = 'Success! INSERTED values into both food_log and user_cart'
else:
code['code'] = '400'
code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

jsondata['code'] = code['code']
jsondata['message'] = code['message']

return(json.dumps(jsondata))


Essentially I'd like it to gather every food that comes in, and write the entire food objects in the array to the food table seamlessly.










share|improve this question

























  • Writing to avoid Python SQL injection would be good, you probably learnt that with PHP. Knowing the error/results would be good. Happy Turkey genocide day to you too :-)

    – danblack
    Nov 25 '18 at 23:44











  • no error messages on my end. if there are multiple foods in the array, however, it will only write the first object coming in. Say if the user in mealData with cart id 11 had an apple and a banana, it would only write apple to cart id and then stop.

    – broda
    Nov 26 '18 at 3:40
















0















I am currently having major issues writing foods from a JSON to my database. The GET method works just fine. However, when I receive a JSON, it is not properly writing to the database.



What I do is the following




  • Write a new meal to the database (creates a new meal/cart id via autoincrement)

  • Utilize the LAST_INSERT_ID() command to write new foods to that meal/cart.


Once I get here writing one food is fine, however if there is numerous foods, I can't seem to get it to write the other foods from the JSON to the database.



The JSON I am receiving is as follows:



Endpoint: /meallog
Request params:{
method: ”post”,
headers: headers,
url: string,
data:{
userId: string,
date: string,
mealData:{
mealName: String,
food: [
{
id:string,
foodname:string,
numCal:int,
servingSize:int,
servingSizeUnit:string,
totalCalories:int
},
{
(repeat above)
}
]
}

}
}
Response: (JSON Object)
{
code: 200/400,
message: String
}


The Code I currently have for my post is below:



elif request.method == 'POST':
jsondata = {}
code={}

user_id = request.json['user_id']
date = request.json['date']
mealName = request.json['mealName']
food_id = request.json['id']
food_name = request.json['foodname']
food_cal = request.json['numCal']
serving_size = request.json['servingSize']
serving_unit = request.json['servingSizeUnit']
totalCal = request.json['totalCalories']

postmeal = conn.cursor()
INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_cal, cart_name) VALUES (%s, %s, %s, %s);"
postmeal.execute(INS_meal, (user_id, date, totalCal, mealName))
conn.commit()

postfood = conn.cursor()
INS_food = "INSERT INTO food_log VALUES (LAST_INSERT_ID(), %s, %s, %s, %s, %s);"
postfood.execute(INS_food, (food_id, food_name, food_cal, serving_size, serving_unit))
conn.commit()

if postfood.execute and postmeal.execute:
code['code'] = '200'
code['message'] = 'Success! INSERTED values into both food_log and user_cart'
else:
code['code'] = '400'
code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

jsondata['code'] = code['code']
jsondata['message'] = code['message']

return(json.dumps(jsondata))


Essentially I'd like it to gather every food that comes in, and write the entire food objects in the array to the food table seamlessly.










share|improve this question

























  • Writing to avoid Python SQL injection would be good, you probably learnt that with PHP. Knowing the error/results would be good. Happy Turkey genocide day to you too :-)

    – danblack
    Nov 25 '18 at 23:44











  • no error messages on my end. if there are multiple foods in the array, however, it will only write the first object coming in. Say if the user in mealData with cart id 11 had an apple and a banana, it would only write apple to cart id and then stop.

    – broda
    Nov 26 '18 at 3:40














0












0








0








I am currently having major issues writing foods from a JSON to my database. The GET method works just fine. However, when I receive a JSON, it is not properly writing to the database.



What I do is the following




  • Write a new meal to the database (creates a new meal/cart id via autoincrement)

  • Utilize the LAST_INSERT_ID() command to write new foods to that meal/cart.


Once I get here writing one food is fine, however if there is numerous foods, I can't seem to get it to write the other foods from the JSON to the database.



The JSON I am receiving is as follows:



Endpoint: /meallog
Request params:{
method: ”post”,
headers: headers,
url: string,
data:{
userId: string,
date: string,
mealData:{
mealName: String,
food: [
{
id:string,
foodname:string,
numCal:int,
servingSize:int,
servingSizeUnit:string,
totalCalories:int
},
{
(repeat above)
}
]
}

}
}
Response: (JSON Object)
{
code: 200/400,
message: String
}


The Code I currently have for my post is below:



elif request.method == 'POST':
jsondata = {}
code={}

user_id = request.json['user_id']
date = request.json['date']
mealName = request.json['mealName']
food_id = request.json['id']
food_name = request.json['foodname']
food_cal = request.json['numCal']
serving_size = request.json['servingSize']
serving_unit = request.json['servingSizeUnit']
totalCal = request.json['totalCalories']

postmeal = conn.cursor()
INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_cal, cart_name) VALUES (%s, %s, %s, %s);"
postmeal.execute(INS_meal, (user_id, date, totalCal, mealName))
conn.commit()

postfood = conn.cursor()
INS_food = "INSERT INTO food_log VALUES (LAST_INSERT_ID(), %s, %s, %s, %s, %s);"
postfood.execute(INS_food, (food_id, food_name, food_cal, serving_size, serving_unit))
conn.commit()

if postfood.execute and postmeal.execute:
code['code'] = '200'
code['message'] = 'Success! INSERTED values into both food_log and user_cart'
else:
code['code'] = '400'
code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

jsondata['code'] = code['code']
jsondata['message'] = code['message']

return(json.dumps(jsondata))


Essentially I'd like it to gather every food that comes in, and write the entire food objects in the array to the food table seamlessly.










share|improve this question
















I am currently having major issues writing foods from a JSON to my database. The GET method works just fine. However, when I receive a JSON, it is not properly writing to the database.



What I do is the following




  • Write a new meal to the database (creates a new meal/cart id via autoincrement)

  • Utilize the LAST_INSERT_ID() command to write new foods to that meal/cart.


Once I get here writing one food is fine, however if there is numerous foods, I can't seem to get it to write the other foods from the JSON to the database.



The JSON I am receiving is as follows:



Endpoint: /meallog
Request params:{
method: ”post”,
headers: headers,
url: string,
data:{
userId: string,
date: string,
mealData:{
mealName: String,
food: [
{
id:string,
foodname:string,
numCal:int,
servingSize:int,
servingSizeUnit:string,
totalCalories:int
},
{
(repeat above)
}
]
}

}
}
Response: (JSON Object)
{
code: 200/400,
message: String
}


The Code I currently have for my post is below:



elif request.method == 'POST':
jsondata = {}
code={}

user_id = request.json['user_id']
date = request.json['date']
mealName = request.json['mealName']
food_id = request.json['id']
food_name = request.json['foodname']
food_cal = request.json['numCal']
serving_size = request.json['servingSize']
serving_unit = request.json['servingSizeUnit']
totalCal = request.json['totalCalories']

postmeal = conn.cursor()
INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_cal, cart_name) VALUES (%s, %s, %s, %s);"
postmeal.execute(INS_meal, (user_id, date, totalCal, mealName))
conn.commit()

postfood = conn.cursor()
INS_food = "INSERT INTO food_log VALUES (LAST_INSERT_ID(), %s, %s, %s, %s, %s);"
postfood.execute(INS_food, (food_id, food_name, food_cal, serving_size, serving_unit))
conn.commit()

if postfood.execute and postmeal.execute:
code['code'] = '200'
code['message'] = 'Success! INSERTED values into both food_log and user_cart'
else:
code['code'] = '400'
code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

jsondata['code'] = code['code']
jsondata['message'] = code['message']

return(json.dumps(jsondata))


Essentially I'd like it to gather every food that comes in, and write the entire food objects in the array to the food table seamlessly.







python mysql json






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 26 '18 at 1:05







broda

















asked Nov 25 '18 at 23:31









brodabroda

177




177













  • Writing to avoid Python SQL injection would be good, you probably learnt that with PHP. Knowing the error/results would be good. Happy Turkey genocide day to you too :-)

    – danblack
    Nov 25 '18 at 23:44











  • no error messages on my end. if there are multiple foods in the array, however, it will only write the first object coming in. Say if the user in mealData with cart id 11 had an apple and a banana, it would only write apple to cart id and then stop.

    – broda
    Nov 26 '18 at 3:40



















  • Writing to avoid Python SQL injection would be good, you probably learnt that with PHP. Knowing the error/results would be good. Happy Turkey genocide day to you too :-)

    – danblack
    Nov 25 '18 at 23:44











  • no error messages on my end. if there are multiple foods in the array, however, it will only write the first object coming in. Say if the user in mealData with cart id 11 had an apple and a banana, it would only write apple to cart id and then stop.

    – broda
    Nov 26 '18 at 3:40

















Writing to avoid Python SQL injection would be good, you probably learnt that with PHP. Knowing the error/results would be good. Happy Turkey genocide day to you too :-)

– danblack
Nov 25 '18 at 23:44





Writing to avoid Python SQL injection would be good, you probably learnt that with PHP. Knowing the error/results would be good. Happy Turkey genocide day to you too :-)

– danblack
Nov 25 '18 at 23:44













no error messages on my end. if there are multiple foods in the array, however, it will only write the first object coming in. Say if the user in mealData with cart id 11 had an apple and a banana, it would only write apple to cart id and then stop.

– broda
Nov 26 '18 at 3:40





no error messages on my end. if there are multiple foods in the array, however, it will only write the first object coming in. Say if the user in mealData with cart id 11 had an apple and a banana, it would only write apple to cart id and then stop.

– broda
Nov 26 '18 at 3:40












1 Answer
1






active

oldest

votes


















0














I fixed my issue and utilized LAST_INSERT_ID() in a more structured way, as well as to properly loop through the foods incoming.



elif request.method == 'POST':
jsondata = {}
code={}

#with open('inc.json') as json_data:
#d = json.load(json_data)
#print(d)
user_id = request.json['userId']
date = request.json['date']

mealName = request.json['mealData']['mealName']

foodlist = request.json['mealData']['food']

postmeal = conn.cursor()
INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_name) VALUES (%s, %s, %s);"
postmeal.execute(INS_meal, (user_id, date, mealName))
conn.commit()
postmeal.execute("select LAST_INSERT_ID();")
SEL_MEAL_ID = postmeal.fetchone()[0]

food_str = ""
for food in foodlist:
print (food)
food_str+="({}, '{}', '{}', {}, {}, '{}', {}), ".format(SEL_MEAL_ID, food['id'], food['foodname'], food['numCal'], food['servingSize'], food['servingSizeUnit'], food['totalCalories'])

postfood = conn.cursor()
INS_food = "INSERT INTO food_log VALUES {};".format(food_str[:-2]) # To exclude the last comma in the food string
postfood.execute(INS_food)
conn.commit()

if postfood.execute and postmeal.execute:
code['code'] = '200'
code['message'] = 'Success! INSERTED values into both food_log and user_cart'
else:
code['code'] = '400'
code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

jsondata['code'] = code['code']
jsondata['message'] = code['message']

return(json.dumps(jsondata))





share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53473057%2fwrite-multiple-foods-to-db-from-json%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I fixed my issue and utilized LAST_INSERT_ID() in a more structured way, as well as to properly loop through the foods incoming.



    elif request.method == 'POST':
    jsondata = {}
    code={}

    #with open('inc.json') as json_data:
    #d = json.load(json_data)
    #print(d)
    user_id = request.json['userId']
    date = request.json['date']

    mealName = request.json['mealData']['mealName']

    foodlist = request.json['mealData']['food']

    postmeal = conn.cursor()
    INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_name) VALUES (%s, %s, %s);"
    postmeal.execute(INS_meal, (user_id, date, mealName))
    conn.commit()
    postmeal.execute("select LAST_INSERT_ID();")
    SEL_MEAL_ID = postmeal.fetchone()[0]

    food_str = ""
    for food in foodlist:
    print (food)
    food_str+="({}, '{}', '{}', {}, {}, '{}', {}), ".format(SEL_MEAL_ID, food['id'], food['foodname'], food['numCal'], food['servingSize'], food['servingSizeUnit'], food['totalCalories'])

    postfood = conn.cursor()
    INS_food = "INSERT INTO food_log VALUES {};".format(food_str[:-2]) # To exclude the last comma in the food string
    postfood.execute(INS_food)
    conn.commit()

    if postfood.execute and postmeal.execute:
    code['code'] = '200'
    code['message'] = 'Success! INSERTED values into both food_log and user_cart'
    else:
    code['code'] = '400'
    code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

    jsondata['code'] = code['code']
    jsondata['message'] = code['message']

    return(json.dumps(jsondata))





    share|improve this answer






























      0














      I fixed my issue and utilized LAST_INSERT_ID() in a more structured way, as well as to properly loop through the foods incoming.



      elif request.method == 'POST':
      jsondata = {}
      code={}

      #with open('inc.json') as json_data:
      #d = json.load(json_data)
      #print(d)
      user_id = request.json['userId']
      date = request.json['date']

      mealName = request.json['mealData']['mealName']

      foodlist = request.json['mealData']['food']

      postmeal = conn.cursor()
      INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_name) VALUES (%s, %s, %s);"
      postmeal.execute(INS_meal, (user_id, date, mealName))
      conn.commit()
      postmeal.execute("select LAST_INSERT_ID();")
      SEL_MEAL_ID = postmeal.fetchone()[0]

      food_str = ""
      for food in foodlist:
      print (food)
      food_str+="({}, '{}', '{}', {}, {}, '{}', {}), ".format(SEL_MEAL_ID, food['id'], food['foodname'], food['numCal'], food['servingSize'], food['servingSizeUnit'], food['totalCalories'])

      postfood = conn.cursor()
      INS_food = "INSERT INTO food_log VALUES {};".format(food_str[:-2]) # To exclude the last comma in the food string
      postfood.execute(INS_food)
      conn.commit()

      if postfood.execute and postmeal.execute:
      code['code'] = '200'
      code['message'] = 'Success! INSERTED values into both food_log and user_cart'
      else:
      code['code'] = '400'
      code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

      jsondata['code'] = code['code']
      jsondata['message'] = code['message']

      return(json.dumps(jsondata))





      share|improve this answer




























        0












        0








        0







        I fixed my issue and utilized LAST_INSERT_ID() in a more structured way, as well as to properly loop through the foods incoming.



        elif request.method == 'POST':
        jsondata = {}
        code={}

        #with open('inc.json') as json_data:
        #d = json.load(json_data)
        #print(d)
        user_id = request.json['userId']
        date = request.json['date']

        mealName = request.json['mealData']['mealName']

        foodlist = request.json['mealData']['food']

        postmeal = conn.cursor()
        INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_name) VALUES (%s, %s, %s);"
        postmeal.execute(INS_meal, (user_id, date, mealName))
        conn.commit()
        postmeal.execute("select LAST_INSERT_ID();")
        SEL_MEAL_ID = postmeal.fetchone()[0]

        food_str = ""
        for food in foodlist:
        print (food)
        food_str+="({}, '{}', '{}', {}, {}, '{}', {}), ".format(SEL_MEAL_ID, food['id'], food['foodname'], food['numCal'], food['servingSize'], food['servingSizeUnit'], food['totalCalories'])

        postfood = conn.cursor()
        INS_food = "INSERT INTO food_log VALUES {};".format(food_str[:-2]) # To exclude the last comma in the food string
        postfood.execute(INS_food)
        conn.commit()

        if postfood.execute and postmeal.execute:
        code['code'] = '200'
        code['message'] = 'Success! INSERTED values into both food_log and user_cart'
        else:
        code['code'] = '400'
        code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

        jsondata['code'] = code['code']
        jsondata['message'] = code['message']

        return(json.dumps(jsondata))





        share|improve this answer















        I fixed my issue and utilized LAST_INSERT_ID() in a more structured way, as well as to properly loop through the foods incoming.



        elif request.method == 'POST':
        jsondata = {}
        code={}

        #with open('inc.json') as json_data:
        #d = json.load(json_data)
        #print(d)
        user_id = request.json['userId']
        date = request.json['date']

        mealName = request.json['mealData']['mealName']

        foodlist = request.json['mealData']['food']

        postmeal = conn.cursor()
        INS_meal = "INSERT INTO user_cart (user_id, datetime, cart_name) VALUES (%s, %s, %s);"
        postmeal.execute(INS_meal, (user_id, date, mealName))
        conn.commit()
        postmeal.execute("select LAST_INSERT_ID();")
        SEL_MEAL_ID = postmeal.fetchone()[0]

        food_str = ""
        for food in foodlist:
        print (food)
        food_str+="({}, '{}', '{}', {}, {}, '{}', {}), ".format(SEL_MEAL_ID, food['id'], food['foodname'], food['numCal'], food['servingSize'], food['servingSizeUnit'], food['totalCalories'])

        postfood = conn.cursor()
        INS_food = "INSERT INTO food_log VALUES {};".format(food_str[:-2]) # To exclude the last comma in the food string
        postfood.execute(INS_food)
        conn.commit()

        if postfood.execute and postmeal.execute:
        code['code'] = '200'
        code['message'] = 'Success! INSERTED values into both food_log and user_cart'
        else:
        code['code'] = '400'
        code['message'] = 'Error Connecting to DB. Cant insert into food_log and-or user_cart'

        jsondata['code'] = code['code']
        jsondata['message'] = code['message']

        return(json.dumps(jsondata))






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 28 '18 at 0:06

























        answered Nov 26 '18 at 18:47









        brodabroda

        177




        177






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53473057%2fwrite-multiple-foods-to-db-from-json%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)