Sqlalchemy выдает ошибку блокировки базы данных, когда обновление помещено в цикл for - PullRequest
0 голосов
/ 01 июня 2019

Есть 2 таблицы A и B. Обе имеют столбцы с именами master и slave.Главные значения таблицы A должны быть обновлены до мастер-таблицы TableB (для строк с одинаковыми ведомыми значениями в таблице A и таблице B).

Поскольку Sqlite не имеет метода соединения и не поддерживает обновления нескольких таблиц, я вынужден рассмотреть другие варианты.

Работает следующий код.


tableB = Table('table_B', metadata, autoload=True)
tableA = Table('table_A', metadata, autoload=True)


ku = tableA.update().where(tableA.c.master == "All for One" ).values(master = "Shigaraki Tomura")
ku.execute()

Но когда я пытаюсь использовать разные значения в .values ​​() вещи запутываются

ls = select(columns=[tableA.c.master,tableB.c.master], whereclause=tableA.c.slave == tableB.c.slave).distinct()
rows = ls.execute()

for i,j in rows:
    ku = tableA.update().where(tableA.c.master == i).values(master = j)
    ku.execute()

Ниже приведены сообщения об ошибках

    File "/home/ehaacls/miniconda/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 505, in do_commit
        dbapi_connection.commit()
    sqlite3.OperationalError: database is locked

    raise exc.ResourceClosedError("This Connection is closed")
    sqlalchemy.exc.ResourceClosedError: This Connection is closed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...