Python проблема при вставке записей в MongoDB - PullRequest
0 голосов
/ 12 июля 2020

Я составляю список инстансов в Amazon EC2. Мой сценарий отлично работает, помещая список в файл CSV и отправляя его вам.

Но теперь я хочу вставить записи в MongoDB, чтобы можно было отслеживать различия в среде.

У меня есть функция для вставки записей в MongoDB, которая выглядит так:

def insert_col(instance_col,mydict):
    x = instance_col.insert_one(mydict) 
    print(f"MongoDB record inserted: {x.inserted_id}")
    return x

Словарь с именем instance_col, который я пытаюсь вставить в БД, выглядит следующим образом:

{'AWS Account': 'jf-master-pd', 'Account Number': 'xxxxxxxxx', 'Name': 'usawsweb010', 'Instance ID': 'i-0871d82fb5c4e268b', 'AMI ID': 'ami-006219aba10688d0b', 'Volumes': 'vol-047b2ca3dd93b9021, vol-02ea0a81271a00b0b, vol-00abcef2eee9f19de, vol-09222810b7fc52265, vol-03c9a84ee93f81edc', 'Private IP': '172.31.75.47', 'Public IP': 'x.xxx.xxx.xxx', 'Private DNS': 'ip-172-31-75-47.ec2.internal', 'Availability Zone': 'us-east-1f', 'VPC ID': 'vpc-68b1ff12', 'Type': 't2.micro', 'Key Pair Name': 'timd', 'State': 'running', 'Launch Date': 'July 11 2020'}

Если я попытаюсь использовать функцию insert_col, она вставит первую запись, а затем выдаст исключение, в котором говорится:

MongoDB record inserted: 5f0a46f267a8132e4b31e83f
An exception has occurred: dict contains fields not in fieldnames: '_id'

Я не знаю, почему он жалуется на мой dict, не содержащий имени поля с именем '_id' ПОСЛЕ запись вставлена. После этого программа перестает работать.

Это полная трассировка:

  Traceback (most recent call last):
  File ".\aws_ec2_list_instances.py", line 768, in <module>
    main()
  File ".\aws_ec2_list_instances.py", line 632, in main
    output_file = list_instances(aws_account,aws_account_number, interactive, regions, fieldnames, show_details, instance_col)
  File ".\aws_ec2_list_instances.py", line 249, in list_instances
    writer.writerow(instance_dict)
  File "C:\Users\tdun0002\AppData\Local\Programs\Python\Python38-32\lib\csv.py", line 154, in writerow
    return self.writer.writerow(self._dict_to_list(rowdict))
  File "C:\Users\tdun0002\AppData\Local\Programs\Python\Python38-32\lib\csv.py", line 149, in _dict_to_list
    raise ValueError("dict contains fields not in fieldnames: "
ValueError: dict contains fields not in fieldnames: '_id'

Когда я вызываю функцию, я вызываю ее так: insert_col(instance_col,instance_dict). Если я прокомментирую это, программа продолжает развиваться и работает отлично, как до того, как я начал обезглавливать MongoDB.

У меня 10 серверов в этой среде, которые я пытаюсь вставить в MongoDB.

Почему он это делает и как мне вставить эти записи в MongoDB?

1 Ответ

1 голос
/ 12 июля 2020

Попробуйте сделать

from bson.objectid import ObjectId
def insert_col(instance_col,mydict):
    mydict['_id'] = ObjectId() 

    x = instance_col.insert_one(mydict) 
    print(f"MongoDB record inserted: {x.inserted_id}")
    return x


...