2017-01-28 14 views
0

Я написал этот кусок кода, где я пытаюсь добавить новую строку в таблицу (база данных SQLite)TypeError («индексы списка должны быть целыми числами, а не ул»)

@get('/inventory/add') 
def inventory_add(db): 
    db.execute("INSERT INTO inventory (name, category, location, date, amount) VALUES (?, ?, ?, ?, ?)", (item['name'], item['category'], item['location'], item['date'], item['amount'])) 

    db.commit() 

В первом, когда я казнены это я получил:

NameError("global name 'item' is not defined",) 

так что я выкопал вокруг интернет-ап в моей неопытности с питоном я решил объявить элемент в виде списка в надежде, что он будет работать:

item=[] 
@get('/inventory/add') 
def inventory_add(db): 
    db.execute("INSERT INTO inventory (name, category, location, date, amount) VALUES (?, ?, ?, ?, ?)", (item['name'], item['category'], item['location'], item['date'], item['amount'])) 

    db.commit() 

Таким образом, после выполнения кода я получил это:

TypeError('list indices must be integers, not str',) 
+1

Ваш «элемент» - это список. Когда вы индексируете его с помощью '[]', индекс должен быть целым числом. 'item ['location']' недопустимо, 'item [0]' будет действительным (но не обязательно правильным). В качестве альтернативы используйте словарь: 'item = {}'. Затем строковые индексы (фактически, ключи) являются законными. – DyZ

+0

Я попробовал 'item = {}', но когда я запустил его, я получаю: 'KeyError: 'name'' – JDoe

+0

Покажите код, который вы использовали для инициализации 'item'. – DyZ

ответ

2

Что вам здесь нужно, это словарь, а не список. Итак, попробуйте следующее:

item={'name':'somename', 'category':'somecat','location':'someloc', 'date':'somedate','amount':'someamt'} 

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

Для ошибки курсора, как и DYZ, вы пытаетесь зафиксировать курсор, но вы должны попытаться зафиксировать экземпляр, с которым вы установили соединение с базой данных. Также, пожалуйста, верните что-то на своих страницах, или пользователь просто застрянет при доступе к странице.

+0

Это то, что я получаю после того, как я сделал то, что вы сказали: 'AttributeError: объект sqlite3.Cursor 'не имеет атрибута' commit '' – JDoe

+0

@JDoe Это ваша проблема _next_, и она отделена от проблемы со списком/словарем. Указанный курсор не имеет метода '.commit()'. Этот метод является частью объекта подключения к базе данных. – DyZ

+0

@JDoe Ошибка для db.commit() мой друг. Не могли бы вы изменить вопрос, чтобы показать соответствующий код, чтобы я мог получить доступ к тому, что может быть проблемой? – iamnotgoogle