31
Янв
2017

Запрос update на большой таблице

Имеется таблица с 2,5 млн строками. Необходимо изменить ее скриптом. Вычитал, что метод fetchall() не рекомендуется использовать, т.к. результат запроса будет помещен в память. Использую fetchmany():

def GetData(cur):
v_query = """select fio_contact, id_contact from atb_segmen_email_col where fio_contact is not null"""
u_query = """update atb_segmen_email_col set sex = :v1 where id_contact = :v2"""
cur.execute(v_query)
sql = cur.fetchmany(100)
while sql:
    for row in sql:
        v_id = row[0]
        w = morph.parse(translit(str(row[0]), 'ru'))[0].tag.gender
        cur.execute(u_query, {'v1' : w, 'v2: v_id'})
        cur.execute('commit')
    sql = cur.fetchmany(100)

Но получаю ошибку:

cx_oracle.InterfaceError: not a query

Что не так? Может есть другой способ, более быстрый?

Даже до возникновения ошибки, запрос на изменение был совсем медленный.

Источник: https://ru.stackoverflow.com/questions/621609/%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81-update-%D0%BD%D0%B0-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B5

Share

Тебе может это понравится...