psycopg2 executemany错误:表元组索引超出范围

2024-06-28 19:00:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将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”, "马蒂斯",, '"31/12/2013"', '"2014"', “LLAMADA DEL 066”, ““(I)事故报告是一个非正式事件”, '"02:11:35"', “意外的choque sin lesionados”, '"1"', “IZTAPALAPA”, '"01/01/2014"', “Enero”, '-99.07113', “紧急情况”], ['19.36336', ‘C4/140101/04189’, '[19.36336, -99.19104]', '"21:45:43"', “ALVARO OBREGON”, ““Mi\u00e9rcoles”, '"01/01/2014"', '"2014"', “LLAMADA DEL 066”, ““(A)在紧急情况下,确认紧急情况报告”, '"23:55:59"', "意外事故",, '"1"', “ALVARO OBREGON”, '"01/01/2014"', “Enero”, '-99.19104', “《急诊医学》”]]

我这样调用函数:

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

但是我不断得到错误:列表索引超出范围

是因为我使用的是列表而不是元组吗


Tags: name列表db错误记录connectionrecordcursor
1条回答
网友
1楼 · 发布于 2024-06-28 19:00:27

我刚刚计算了逗号的数量,您的sql_insert_query有18列,而cursor.executemany()中的两个值列表各有17列。你调查过了吗

Edit1:等等,它甚至更琐碎。每个值列表中缺少一次逗号。搜索'11' '12'

相关问题 更多 >