Как обновить строку за строкой, используя функцию python в sqlite3? - PullRequest
0 голосов
/ 24 марта 2020

Этот вопрос дублирован, я думаю, но я не мог понять другие ответы ...

  1. Исходная таблица выглядит следующим образом.
NAME    AGE SMOKE
John    25  None
Alice   23  None
Ken     26  None

Я обновлю столбец SMOKE в этих строках,

Но Мне нужно использовать вывод функции, который был закодирован в python check_smoke() . Если я введу имя в check_smoke(), то оно вернет "Smoke" или "Not Smoke".

Таким образом, итоговая таблица будет выглядеть следующим образом:

NAME    AGE SMOKE
John    25  Smoke
Alice   23  Not Smoke
Ken     26  Not Smoke

Я использую sqlite3 и python3. Как мне это сделать? Спасибо за помощь!

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете использовать 1 курсор для выбора строк и еще один курсор для их обновления.

Предполагая, что имя таблицы - smk (замените его своим реальным именем), а con - установленное соединение в базу данных, вы можете сделать:

curs = con.cursor()
curs2 = con.cursor()
batch = 64            # size of a batch of records
curs.execute("SELECT DISTINCT name FROM smk")
while True:
    names = curs.fetchmany(batch)                             # extract a bunch of rows
    if len(names) == 0: break
    curs2.executemany('UPDATE smk SET smoke=? WHERE name=?',  #  and update them
              [(check_smoke(name[0]), name[0]) for name in names])
con.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...