Python pyodbc.row в список

Я пытаюсь создать скрипт Python для преобразования из базы данных SQLServer в Mongodb. В запросе от SQLServer я возвращаю данные в формате JSON, используя метод FOR JSON AUTO. Когда я использую следующий код, я не могу получить правильный тип для моей переменной для pymongo, чтобы правильно вставлять данные.

client = MongoClient('localhost', 27017)
db = client.npnrd_test
collection = db.certs

sql_file = open('./sql/F1043_Tract.sql')
sql_d = sql_file.read()
sql_file.close()

cursor.execute(sql_d)
cert_data = cursor.fetchone()
cert_list = cert_data[0]
print(cert_list)
print(type(cert_list))

Когда я получаю «тип» cert_list, это класс «str», а не список классов, как это должно быть для pymongo. Если я распечатаю данные, скопирую и вставлю их непосредственно в новую переменную, это будет список классов типов, который будет завершен в pymongo. Что мне не хватает?


person Heath    schedule 10.10.2018    source источник


Ответы (1)


Я считаю, что вам нужно использовать cert_data напрямую, а не cert_list. Попробуйте ниже. Обычно cursor.fetchone() извлекает следующую строку набора результатов запроса и возвращает одну последовательность или None, если больше нет доступных строк. Вы используете pyodbc?

cert_data = cursor.fetchone()
print type(cert_data) 

Вместо использования cursor.fetchone() вы также можете использовать курсор в качестве итератора.

for row in cursor:
   print row
   # use row data to insert to mongodb

Обновление ответа согласно комментариям. Чтобы преобразовать pyodbc.row в список, вы можете использовать простое понимание списка.

for row in cursor:
   row_to_list = [elem for elem in row]
person Angela    schedule 10.10.2018
comment
Да, извините, я забыл упомянуть, что использую pyodbc. Тип cert_data — это pyodbc.Row, а не список, как мне нужно. Когда я перебираю курсор, это тот же pyodbc.Row, что и другие. Спасибо за помощь. - person Heath; 10.10.2018