psycopg2 executemany ERROR: индекс кортежа таблицы вне диапазона - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь вставить данные из файла JSON в базу данных Postgres, но я получаю эту ошибку "индекс кортежа таблицы вне диапазона".

Я был на этом в течение дня, и я могу найти свою ошибку. Я был бы очень признателен за вашу помощь. Вот мой код Я использую executemany и вставляю 2 строки в базу данных

def bulkInsert(records, db_name, db_user, db_pass, db_endpoint):
try:
    connection = connect(db_name, db_user, db_pass, db_endpoint)
    cursor = connection.cursor()
    sql_insert_query = """ INSERT INTO raw.IncidentesViales (latitud, folio,
                                                            geopoint, hora_creacion,
                                                            delegacion_inicio, dia_semana,
                                                            fecha_creacion, ano,
                                                            tipo_entrada, codigo_cierre,
                                                            hora_cierre, incidente_c4, 
                                                            mes, delegacion_cierre, 
                                                            fecha_cierre, mesdecierre, 
                                                            longitud, clas_con_f_alarma) 
                           VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """

    # executemany() to insert multiple rows rows
    result = cursor.executemany(sql_insert_query, records)
    connection.commit()
    print(cursor.rowcount, "***** Record inserted successfully into table *****")

except (Exception, psycopg2.Error) as error:
    print("***** Failed inserting record into table {} *****".format(error))

finally:
    # closing database connection.
    if (connection):
        cursor.close()
        connection.close()
        print("***** PostgreSQL connection is closed *****")

Я использую промежуточную функцию, чтобы получить нужные мне поля из файла JSON и преобразовать их в список :

def records_rows(record):
l = [json.dumps(record['fields'][campo]) for campo in record['fields'].keys()]
return l

Я получаю записи , которые я хочу вставить, они выглядят так (2 записи):

[['19.31469', '"C4 / 131231/03346 "," [19.31469, -99.07113] ',' "22:44:53", "" IZTAPALAPA "," Martes "," 31.12.2013 "," " 2014 "','" LLAMADA DEL 066 "','" (I) Сообщение о происшествии в полном объеме, а также информирование о событиях ",," "02:11:35", "" accidente- choque sin lesionados "','" 1 "','" IZTAPALAPA "," "01/01/2014", "Enero", "-99.07113", "EMERGENCIA" '], ['19 .36336' , '"C4 / 140101/04189", "[19.36336, -99.19104]", "21:45:43", "ALVARO OBREGON", "Mi \ u00e9rcoles", "" 01/01 / 2014 "','" 2014 "','" LLAMADA DEL 066 "','" (A) La unidad de atenci \ u00f3n a Emergencias fue despachada, lleg \ u00f3 al lugar de los hechos y подтверждает \ u00f3 la Emergencia reportada «», '"23:55:59"', '"accidente-choque con lesionados"', '"1"', '"ALVARO OBREGON" "," "01.01.2014"', "" Enero "',' -99.19104 ',' "URGENCIAS MEDICAS" ']]

И я вызываю функцию так:

bulkInsert([records_rows(record) for record in records], db_name, db_user_name, db_user_password, db_host)

НО я продолжаю получать ОШИБКА: индекс списка из диапазон

Это потому, что я использую список вместо кортежа?

1 Ответ

0 голосов
/ 12 апреля 2020

Я только что посчитал количество запятых, и у вашего sql_insert_query есть 18 столбцов, в то время как два списка значений в cursor.executemany() имеют по 17 в каждом. Вы смотрели на это?

Edit1: Подождите, это еще более тривиально. Вы пропускаете запятые один раз в каждом списке значений. Поиск '11' '12'

...