Возврат к нулю, если ключ dict отсутствует в операторе вставки курсора Python

#python #sqlite #null #insert

#python #sqlite #null #вставить

Вопрос:

Я пытаюсь использовать словарь Python для создания записи SQLite следующим образом, но иногда один из ключей может не существовать, что вызывает ошибку, поэтому я попытался убедиться, что все ключи всегда существуют и будут заполнены как NULL с использованием None , но это также не работает ( 'NoneType' object is not iterable ) . Чего мне не хватает?

     def insert_device(self, device):
    try:
        db = sqlite3.connect(self.db_path)
        cursor = db.cursor()
        for column in cursor.description:
            print(column)
            if column not in device:
                device[column] = None
        cursor.execute('''INSERT INTO devices(created, name, location_id, model, port) VALUES(CURRENT_TIMESTAMP,?,?,?,?)''', [device['name'], device['location_id'], device['model'], device['port']])
        cursor.close()
        db.commit()
        db.close()
    except Exception as e:
        self._logger.error("Error inserting device into database: %s" % e)
  

Ответ №1:

Я считаю, что проблема, с которой вы столкнулись, заключается в том, что cursor.description is None и вы пытаетесь выполнить итерацию по нему. И это None потому, что вы ничего не запрашивали.

Вы можете просто использовать device.get(column) вместо device[column] , get метод либо вернет значение ключа для dict, если он существует, либо None иным образом.

Комментарии:

1. Ах, я должен был прочитать о том, как это работает. Любой способ использовать cursor.description таким образом, чтобы мне не нужно было явно указывать все возможные столбцы?