2016-03-16 2 views
1

Я новичок в Python и SQLite, но у меня есть программа, в которой я хочу, чтобы пользователь вводил количество элементов, которые они хотят заказать из таблицы базы данных. Они вводят продукты и количества, а запрос select должен возвращать элементы, которые соответствуют. Он работает, за исключением того, что он только распечатывает последнюю запись пользователя, а не все записи пользователя. Я думаю, что проблема вокруг строки выбора запроса, но я не могу понять это. Я пробовал множество вариантов, но он либо сбой, либо возвращает только последнюю запись пользователя.SQLite, Python и списки

enter code here 
for i in range(orderQty): 
    prodItem = int(input("Enter your Item to the List: ")) 
    userOrder.append(prodItem) 
    prodQty = int(input("Enter the item quantity: ")) 
    userQty.append(prodQty) 


for j in range(len(userOrder)): 
    cursor = connection.execute("SELECT GTINnum, Item, CurrentStock,Cost from orderFile WHERE GTINnum= ?", (prodItem,)) 


    for row in cursor: 
     print ("GTINnum =", row[0], "Item = ", row[1], "Cost = ", row[2], "Qty Ordered=",(prodQty), "\n") 
     prodCost = prodQty * row[2] 
     print ("Total product cost is: ", (prodCost)) 
+0

отступ еще не в порядке. Пожалуйста, используйте свой редактор, чтобы отложить свой код на 4 пробела, а затем вставить в вопрос. Делает жизнь намного проще;) – flaschbier

+0

попробуйте 'userOrder [j]' как параметр для select вместо 'prodItem'. Аналогично для 'prodQty' дальше. Вместо этого возьмите 'userQty [j]'. – flaschbier

+0

IDLE говорит мне, что отступом является 4 пробела? – user3717991

ответ

1

В блоке

for j in range(len(userOrder)): 
    cursor = connection.execute("SELECT GTINnum, Item, CurrentStock,Cost from orderFile WHERE GTINnum= ?", (prodItem,)) 
    for row in cursor: 
     print ("GTINnum =", row[0], "Item = ", row[1], "Cost = ", row[2], "Qty Ordered=",(prodQty), "\n") 
     prodCost = prodQty * row[2] 
     print ("Total product cost is: ", (prodCost)) 

вы используете последний ввод данных пользователем prodItem и prodQty снова и снова. Заменить то, что итерация через списки вы построили раньше:

for j in range(len(userOrder)): 
    cursor = connection.execute("SELECT GTINnum, Item, CurrentStock,Cost from orderFile WHERE GTINnum= ?", (userOrder[j],)) 
    for row in cursor: 
     print ("GTINnum =", row[0], "Item = ", row[1], "Cost = ", row[2], "Qty Ordered=",userQty[j], "\n") 
     prodCost = userQty[j] * row[2] 
     print ("Total product cost is: ", (prodCost)) 

Может быть, я пропустил некоторые появления, но должно быть ясно, где вы застряли ...

Update: Если вы хотите сделать только один выбор, вы должны сгенерировать последовательность ?, например по

q = "(" + ",".join(["?" for x in userOrder]) + ")" 

и добавить это к запросу заканчивающегося in. Вам также придется преобразовать listuserOrder в кортеж. Но тогда становится сложно возиться с порядком результата по сравнению с порядком записей в prodQty. Просто передав массив в качестве параметра и ожидаем, что он «развернется», = до in не будет работать. Если вы не хотите полностью менять свою программу, я бы не стал так поступать.