Я пишу python + функцию управления базой данных sqlite3, где каждая «продажа» в системе должна осуществляться только при наличии достаточного количества единиц товара, и каждая «поставка» может быть осуществлена в любое время.
Я пытаюсь сделать запрос к базе данных и извлечь строку, затем обновить одну запись в ней и использовать ту же таблицу для выборки следующей строки. Все обновления должны быть видны для запроса следующей строки. по какой-то причине (которую я не понимаю и с удовольствием) cursor.Execute(#some update#)
сломает предыдущий cursor.fetchmany(1)
, и это завершится выходом из режима l oop.
вот код :
def act():
selection = """SELECT Products_tab.quantity as old_quantity,
Activities_tab.quantity as new_quantity,
Products_tab.id
FROM Products_tab inner join Activities_tab on
Products_tab.id=Activities_tab.product_id"""
cursor.execute(selection)
while True:
row_list = cursor.fetchmany(1)
if row_list:
quantity = row_list[0][0]
change_amount = row_list[0][1]
new_quantity = quantity + change_amount
product_id = row_list[0][2]
if change_amount < 0: # sell
if new_quantity >= 0: # just to check if sell is possible
cursor.execute("""UPDATE Products_tab SET quantity=({})
WHERE id = ({})""".format(new_quantity, product_id))
else:
break
Я хотел бы понять, почему это происходит (поскольку я не мог найти какую-либо информацию в Интернете) и как ее решить. спасибо:)