Ошибка при попытке вставить список словарей с pyodbc и python в базу данных, размещенную в Azure - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь вставить список словарей с pyodbc и python, но получаю следующую ошибку:

TypeError: ('Params must be in a list, tuple, or Row', 'HY000')

У меня есть база данных, размещенная в Azure, и мне нужно вставить 1800+ строкв таблице, как в следующем примере

kp = {'documents': [
{'id': '1', 'keyPhrases': ['sport', 'baseball', 'aliens']},
{'id': '2', 'keyPhrases': ['play', 'capacity', 'tired']},
{'id': '3', 'keyPhrases': ['international', 'balance', 'boring']}
]

lst = []
for x in kp['documents']:
    for i in kp['keyPhrases']:
        lst.append({'keyphrases': i, 'paragraph_id': x['id']})
cursor.fast_executemany = True
sql = 'INSERT INTO keyphrases2 (keyphrases, paragraph_id) VALUES (% 
(keyphrases)s, %(paragraph_id)s'
cursor.executemany(sql, lst)

1 Ответ

1 голос
/ 18 апреля 2019

pyodbc не поддерживает именованные параметры;знак вопроса (?) является единственным заполнителем параметра, который мы можем использовать.Также, как указано в ошибке

Параметры должны быть в списке, кортеже или строке

данные строки не могут быть list из dict,должно быть либо

  • list из list,
  • a list из tuple, либо
  • a list из Row объекты.

Так что вам нужно сделать

kp = {'documents': [
{'id': '1', 'keyPhrases': ['sport', 'baseball', 'aliens']},
{'id': '2', 'keyPhrases': ['play', 'capacity', 'tired']},
{'id': '3', 'keyPhrases': ['international', 'balance', 'boring']}
]}

lst = []
for x in kp['documents']:
    for i in x['keyPhrases']:
        lst.append( (i, x['id']) )  # (keyphrases, paragraph_id)
cursor.fast_executemany = True
sql = "INSERT INTO keyphrases2 (keyphrases, paragraph_id) VALUES (?, ?)"
cursor.executemany(sql, lst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...