SQL Вставить ноль, если отсутствуют ключи / значения для чтения словаря, используя python - PullRequest
0 голосов
/ 26 марта 2020

Из списка словаря ... с отсутствующими ключами Список диктов выглядит следующим образом

[{"log_number":"1","timestamp":"2020-01-11 04:23:31","staff_id":"A123","staff_name":"Krill","staff_department":"Sales","service_id":"11111","service_number":"BU-11111","description":"This is description1"},{"log_number":"2","timestamp":"2020-01-11 07:03:39","staff_id":"A456","staff_name":"James","staff_department":"Graphic","service_id":"22222","service_number":"XU-22211","state":"AAA","city":"AAA"},{"log_number":"3","timestamp":"2020-01-27 14:29:11","temp_staff_id":"A571","temp_staff_name":"Mary","staff_department":"Engr","service_id":"89000","service_number":"SP-89001","state":"BBB","city":"BBB"},{"log_number":"4","timestamp":"2020-01-27 15:08:20","staff_id":"A765","staff_name":"Alex","staff_department":"Sales","service_id":"09880","service_number":"XU-09880","description":"This is description3333"}]

I have follow some suggestions here but yet to resolve the issue.

**method1:**

    sql = "INSERT INTO `table1` (`log_number`, `timestamp`, `staff_id`, `staff_name`, `temp_staff_id`, `temp_staff_name`, `staff_department`, `service_id`, `service_number`, `state`, `city`, `description`, `additional_remarks`) VALUES ( %(log_number)s, %(timestamp)s, %(staff_id)s, %(staff_name)s, %(temp_staff_id)s, %(temp_staff_name)s, %(staff_department)s, %(service_id)s, %(service_number)s, %(state)s, %(city)s, %(description)s, %(additional_remarks)s )"
    cursor.executemany( sql, mydata['response']['client_log']['data'])

    **error return**
    1064 (42000): You have an error in your SQL syntax; c....


**method2:**

    sql_template = 'INSERT INTO `table1` ({}) VALUES ({})'
    sql_inserts = []

    for row in mydata['response']['client_log']['data']:
        sql_keys = row.keys()
        sql_values = []

        for key in sql_keys:
            sql_values.append(row[key])

               sql_inserts.append(sql_template.format(', '.join(sql_keys), ', '.join(sql_values)))

    for insert in sql_inserts:
        cursor.executemany(insert, mydata['response']['client_log']['data'])

    **error return**
    1064 (42000): You have an error in your SQL syntax; ...

Я полагал, что это связано с отсутствующими ключами и различиями ключей в каждом диктовке. Пожалуйста, помогите мне, как решить это. Спасибо за вашу доброту и внимание.

@@@@@ ####### @@@@@@

Для проверки отсутствующих ключей в каждом диктовке, если они не существуют, добавьте со значением None

for entry in data['response']['client_log']['data']:
    if "state" not in entry:
        entry["state"] = None
    if "city" not in entry:
        entry["city"] = None
    if "description" not in entry:
        entry["description"] = None
    if "additional_remarks" not in entry:
        entry["additional_remarks"] = None
    else:
        continue
print(data)

Кроме использования if-else (может быть длинным) любым другим методом для достижения того же результата, что и выше? Обновлено благодаря @ MatBail ie

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...