Парсити json (у вигляді dictionary) в Python і інсертити в базу в циклі стрічка за стрічкою виходить ок. Але якщо в json-і десятки тисяч записів, то в циклі виходить довго. Як обійтися без циклу?...
str1 = "{'odata.metadata': 'https://example.com/entity1', 'value': [{'ContactId': '30946834956845968', 'ContactName': 'name1', 'ContactTitle': 'title1', 'ContactEMail': 'user@example.com', 'ContactCompanyOrProperty': 'company1, LLC', 'ContactLastDateChanged': '2020-09-08T19:30:27.223', 'AssociatedEntity': '934859384595348', 'CorporateEntityId': '9458694568', 'RowVersion': '313918713'}, {'ContactId': '934586945568', 'ContactName': 'name2', 'ContactTitle': 'title2', 'ContactEMail': 'user2@example.com', 'ContactCompanyOrProperty': 'company2, LLC', 'ContactLastDateChanged': '2020-09-08T18:30:27.223', 'AssociatedEntity': '93458694568', 'CorporateEntityId': '3046984968', 'RowVersion': '313918713'}]}"
var_raw_dict = eval(str1)
for x in var_raw_dict['value']:
#print(x['ContactId'])
print("Insert into table1 Select '" + str(x.get("ContactId")).replace("None","null") + "', '" + str(x.get("ContactName")).replace("None","null").replace("'","`") + "', '" + str(x.get("ContactEMail")).replace("None","null") + "', '" + str(x.get("ContactTitle")).replace("None","null") + "', '" + str(x.get("ContactCompanyOrProperty")).replace("None","null") + "', '" + str(x.get("ContactLastDateChanged")).replace("None","null") + "', '" + str(x.get("AssociatedEntity")).replace("None","null") + "', '" + str(x.get("CorporateEntityId")).replace("None","null") + "', '" + str(x.get("RowVersion")).replace("None","null") + "'")
Insert into table1 Select '30946834956845968', 'name1', 'user@example.com', 'title1', 'company1, LLC', '2020-09-08T19:30:27.223', '934859384595348', '9458694568', '313918713'
Insert into table1 Select '934586945568', 'name2', 'user2@example.com', 'title2', 'company2, LLC', '2020-09-08T18:30:27.223', '93458694568', '3046984968', '313918713'
Upd: пробую ідею формувати великий інсерт і ранити його шматками при досягненні 500 записів.
якось так:
str1 = "{'odata.metadata': 'https://example.com/entity1', 'value': [{'ContactId': '30946834956845968', 'ContactName': 'name1', 'ContactTitle': 'title1', 'ContactEMail': 'user@example.com', 'ContactCompanyOrProperty': 'company1, LLC', 'ContactLastDateChanged': '2020-09-08T19:30:27.223', 'AssociatedEntity': '934859384595348', 'CorporateEntityId': '9458694568', 'RowVersion': '313918713'}, {'ContactId': '934586945568', 'ContactName': 'name2', 'ContactTitle': 'title2', 'ContactEMail': 'user2@example.com', 'ContactCompanyOrProperty': 'company2, LLC', 'ContactLastDateChanged': '2020-09-08T18:30:27.223', 'AssociatedEntity': '93458694568', 'CorporateEntityId': '3046984968', 'RowVersion': '313918713'}, {'ContactId': '30946834956845968', 'ContactName': 'name3', 'ContactTitle': 'title1', 'ContactEMail': 'user@example.com', 'ContactCompanyOrProperty': 'company1, LLC', 'ContactLastDateChanged': '2020-09-08T19:30:27.223', 'AssociatedEntity': '934859384595348', 'CorporateEntityId': '9458694568', 'RowVersion': '313918713'}, {'ContactId': '934586945568', 'ContactName': 'name4', 'ContactTitle': 'title2', 'ContactEMail': 'user2@example.com', 'ContactCompanyOrProperty': 'company2, LLC', 'ContactLastDateChanged': '2020-09-08T18:30:27.223', 'AssociatedEntity': '93458694568', 'CorporateEntityId': '3046984968', 'RowVersion': '313918713'}]}"
var_raw_dict = eval(str1)
j = 0
i = 0
chunk = 3
var_select = ""
var_value_length = len(var_raw_dict['value'])
for x in var_raw_dict['value']:
#print(x['ContactId'])
i = i + 1
j = j + 1
var_select = var_select + " Select '" + str(x.get("ContactId")).replace("None","null") + "', '" + str(x.get("ContactName")).replace("None","null").replace("'","`") + "', '" + str(x.get("ContactEMail")).replace("None","null") + "', '" + str(x.get("ContactTitle")).replace("None","null") + "', '" + str(x.get("ContactCompanyOrProperty")).replace("None","null") + "', '" + str(x.get("ContactLastDateChanged")).replace("None","null") + "', '" + str(x.get("AssociatedEntity")).replace("None","null") + "', '" + str(x.get("CorporateEntityId")).replace("None","null") + "', '" + str(x.get("RowVersion")).replace("None","null") + "'"
if i == chunk:
var_select = "Insert Into table1 " + var_select
print(var_select)
i = 0
var_select = ""
else:
if j == var_value_length:
var_select = "Insert Into table1 " + var_select
print(var_select)
else:
var_select = var_select + " union all "
Insert Into table1 Select '30946834956845968', 'name1', 'user@example.com', 'title1', 'company1, LLC', '2020-09-08T19:30:27.223', '934859384595348', '9458694568', '313918713' union all Select '934586945568', 'name2', 'user2@example.com', 'title2', 'company2, LLC', '2020-09-08T18:30:27.223', '93458694568', '3046984968', '313918713' union all Select '30946834956845968', 'name3', 'user@example.com', 'title1', 'company1, LLC', '2020-09-08T19:30:27.223', '934859384595348', '9458694568', '313918713'
Insert Into table1 Select '934586945568', 'name4', 'user2@example.com', 'title2', 'company2, LLC', '2020-09-08T18:30:27.223', '93458694568', '3046984968', '313918713'
(в джейсоні чотири записи: в налаштуваннях один шматок це три записи, отже вийшли шматки по три записи і в кінці залишок один запис)