Операция обновления SQLAlchemy не работает, когда список в операторе «IN» огромен - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь изменить значение строк, для которых идентификатор находится в списке "list_var"

    conn = sqlengine.connect()
    metadata = sqlalchemy.MetaData()
    Table_var= sqlalchemy.Table('Table1',metadata, autoload_with = sqlengine)
    query = sqlalchemy.update(Table_var).values(column_var=2).where(Table_var.columns.ID.in_(list_var))
    res = conn.execute(query)

Приведенный выше код прекрасно работает, когда длина list_var мала, но дает следующая ошибка, когда длина огромна.

DBAPIError: (pyodbc.Error) ('07002', '[07002] [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error (0) (SQLExecDirectW)')

Есть ли способ обойти это?

1 Ответ

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

Это сработало, когда я разделил список на более мелкие списки. Ниже приведен код

if(len(list_var)>1000):
     chunks = [list_var[x:x+1000] for x in range(0, len(list_var), 1000)]
     for chunk in chunks:
         query = sqlalchemy.update(Table_var).values(column_var=2).where(Table_var.columns.ID.in_(chunk))
         res = conn.execute(query)
...