#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 таким образом, чтобы мне не нужно было явно указывать все возможные столбцы?