powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Python sqlite3 проблема с UPDATE
8 сообщений из 8, страница 1 из 1
Python sqlite3 проблема с UPDATE
    #40000100
Zmeeed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток! Пишу скрипт на питоне, который читает данные из блокнота, обрабатывает их через регулярные выражения и записывает в таблицу резидентной БД, которая создаётся с помощью библиотеки sqlite3. Таблица содержит поля с названиями городов и краткой информацией о них, у каждого города есть поле id. Создание БД и запись в поля проходят как надо. Далее мне нужно перевести названия городов с транслита на русский, для чего я в цикле беру у каждой записи название города и его айди.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
for i in cur.execute("SELECT name, geonameid FROM places;"):
    f = i[0].lower()
    id = i[1]
    for j in f:
        if j in chars:
            q = chars.get(j)
            f = f.replace(j, q)
    for k in sets:
        if 'схцх' in f:
            f = f.replace('схцх', 'щ')
        if k in f:
            q = sets.get(k)
            f = f.replace(k, q)
    res = (f, id)
    cur.execute("UPDATE places SET name = ? WHERE geonameid = ?;", res)
    conn.commit()



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

В чём может быть проблема? Таблицу заполнял тоже через цикл, а апдейт почему-то с циклом не хочет работать.
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40000121
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сохрани все UPDATE в массив и по окончанию цикла выполни еще одним циклом.
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40000249
Zmeeed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объявил в глобальной области видимости пустой список names, из цикла убрал апдейт и на каждой итерации добавлял к names кортеж res. После цикла вызвал апдейт через executemany, всё заработало как надо. Но всё ещё непонятно, почему исходный вариант кода не работает?
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40000252
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понимаю cur.execute("SELECT ...") принимает записи по одной и обрабатывает, очередной вызов cur.execute() сбрасывает незаконченный предыдущий.
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40001788
Zmeeed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл я уловил, большое спасибо за помощь!
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40007053
Серега Г
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zmeeed, угу, можно из того же соединения получить ещё один курсор и апдейт делать через него.
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40036269
JeyCi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Серега Г
Zmeeed, угу, можно из того же соединения получить ещё один курсор и апдейт делать через него.

но если Update() выполнять через транзакцию, то бд будет блокироваться (в пределах Begin()..Commit()) и в этот момент считывать с 1го курсора не получится... - он будет возвращать пустоты, если пытаться его в этот момент Fetch()
...
Рейтинг: 0 / 0
Python sqlite3 проблема с UPDATE
    #40036271
JeyCi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Как я понимаю cur.execute("SELECT ...") принимает записи по одной и обрабатывает, очередной вызов cur.execute() сбрасывает незаконченный предыдущий.

тогда уж UNION ALL SELECT делать
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Python sqlite3 проблема с UPDATE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (11): Анонимы (7), Bing Bot, Yandex Bot 2 мин., Google Bot 2 мин., CerebroSQL 4 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]