Из списка словаря ... с отсутствующими ключами Список диктов выглядит следующим образом
[{"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