По ссылке в моих комментариях что-то вроде этого может быстро вставить сотни тысяч значений json в таблицу:
JSON:
N'[
{ "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },
{ "id" : 5,"info": { "name": "Jane", "surname": "Smith", "skills": ["SQL", "C#", "Azure"] }, "dob": "2005-11-04T12:00:00" }
]'
Вы бы параметризовали свой SQL-скрипт, чтобы ваше внешнее приложение заполняло @Переменная json (я не знаю, как это выглядит в python, извините, но это так же, как любой параметризованный sql).Вот сценарий
INSERT INTO Person(id, fn, ln, age, dob, skill)
SELECT *
FROM
OPENJSON(@json)
WITH (id int 'strict $.id',
firstName nvarchar(50) '$.info.name',
lastName nvarchar(50) '$.info.surname',
age int,
dateOfBirth datetime2 '$.dob',
skills nvarchar(max) '$.info.skills' as json)
OUTER APPLY
OPENJSON( skills ) --to "recurse" into the skills array
WITH( skill nvarchar(8) '$' )
. Важно отметить, что при перезапуске данные о персонале для Джейн Смит будут повторяться один раз для каждого навыка:
5, Jane, Smith, ..., C#
5, Jane, Smith, ..., SQL
5, Jane, Smith, ..., Azure
Возможно, ваш json не знаетне имеет этой структуры.если это так, вы можете либо оставить его упакованным (не применять внешне), либо удалить ненужные вещи с помощью WHERE:
INSERT INTO Person(id, fn, ln, age, dob, skill)
SELECT *
FROM
OPENJSON(@json)
WITH (
...
skills nvarchar(max) '$.info.skills' as json)
OUTER APPLY
OPENJSON( skills ) --to "recurse" into the skills array
WITH( skill nvarchar(8) '$'
WHERE skill = 'C#'