Вставьте muliple dict в mysqldb с помощью mysql

#python-3.x

#python-3.x

Вопрос:

Я боролся с этим в течение нескольких часов, и сейчас мне хочется плакать, так как я не могу понять, что происходит.

Вот упрощенная версия моих данных:

{ «имя»: { «0»: «ОБЕЛИСК», «1»: «РА» }, «голонган»: { «0»: 88, «1»: 99 }, «фамилия»: { «0»: «БОГ», «1»: «БОГ» }, «ник»: { «0»: 666679, «1»: 666678 }, «status_actif»: { «0»: 1, «1»: 1 }, «tgl_kerja»: { «0»: «Сб, 20 ноября 2021 года 16:28:00 по Гринвичу», «1»: «Чт, 25 ноября 2021 года 16:28:00 по Гринвичу»} }

Это код, который у меня есть :

 app.route('/karyawan-import-excel') def import_excel():  # df = pd.read_csv(r'C:xampphtdocspythoncoba_read_write_exceltesting.csv')  df = pd.read_excel(r'C:xampphtdocspythoncoba_read_write_exceltesting.xlsx')  data = df.to_dict()    cur = mysql.connection.cursor(curMysql)  sql = "INSERT INTO zzz_customers (name, address) VALUES (%s, %s)"  val = [  (data.get('nik'), data.get('first_name'))  # ('Peter', 'Lowstreet 4'),  # ('Amy', 'Apple st 652')  ]   cur.executemany(sql, val )  mysql.connection.commit()  

Ответ №1:

Структура данных, которую вы создали, представляет data = df.to_dict() собой вложенный словарь. Я не знаю простого способа, которым можно было бы получить такую структуру данных в таблицу MySQL.

Вместо этого вы можете внести это небольшое изменение в эту строку, как показано ниже, что даст вам список правил-более простую структуру данных для работы, с которой вы можете затем вставить в таблицу MySQL.

 data = df.to_dict('records') # produces list of dicts  

Затем вы можете «получить» — как вы и пытались сделать-только нужные вам значения в списке кортежей:

 list_of_tuples = [   (d['nik'], d['first_name']) for d in data  ] cur.executemany(sql, list_of_tuples) # ...  

Это то list_of_tuples , как должно выглядеть:

 In [11]: list_of_tuples Out[11]: [(666679, 'OBELISK'), (666678, 'RA')]  

Комментарии:

1. ОК. Спасибо вам за вашу помощь.