sqlite3 в бесконечном цикле python

#sql #python-3.x #loops #sqlite

#sql #python-3.x #циклы #sqlite

Вопрос:

вот код для создания базы данных с таблицей:

 import sqlite3

con = sqlite3.connect('testcountry.db3')
cur = con.cursor()

cur.execute('create table if not exists my_table(city varchar, country varchar, status varchar);')
cur.execute('insert into my_table (city, country, status) values ("New York", "USA", null);')
cur.execute('insert into my_table (city, country, status) values ("Los Angeles", "USA", null);')
cur.execute('insert into my_table (city, country, status) values ("Houston", "USA", null);')
cur.execute('insert into my_table (city, country, status) values ("Dallas", "USA", null);')
cur.execute('insert into my_table (city, country, status) values ("Miami", "USA", null);')
cur.execute('insert into my_table (city, country, status) values ("Toronto", "Canada", null);')
cur.execute('insert into my_table (city, country, status) values ("Montreal", "Canada", null);')


con.commit()

con.close()
  

Вот код, который я пытаюсь выполнить:

 import sqlite3

list_of_countries = ['USA', 'Canada']

con = sqlite3.connect('testcountry.db3') 
con.row_factory = lambda cursor, row: row[0]
cur = con.cursor()

percentage = [cur.execute('select round(count(status) * 100 / count(country), 5) from my_table where country is ?;', (x,)).fetchone() for x in list_of_countries]
print(percentage)

for i,v in enumerate(list_of_countries):

    while percentage[i] < 100:
        print(percentage)


        a = cur.execute('select city from my_table where country is ? and status is null;', (v,)).fetchone()

        b = cur.execute('update my_table set status = "P" where city is ?;', (a,))
        b
        con.commit()



con.close()
  

Идея очень проста:

  1. Возьмите имя из списка(list_of_countries)
  2. подсчитайте, сколько стран имеют ненулевое значение в статусе (получите процент для каждой страны)
  3. Обновить статус по порядку в list_of_countries. Один за другим.

Проблема, с которой я сталкиваюсь: когда я запускаю свой скрипт, он начинает цикл и не останавливается. Однако в данном случае он обновляет статус для первого значения в list_of_countries: USA .

Есть идеи, почему?

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

1. percentage[i] это просто копия значения базы данных.

2. хм, да, я тоже думал об этом. Спасибо. У вас есть какие-либо идеи, как правильно его зациклить? для меня важно, чтобы порядок из списка был правильным.