В скрипте Python у меня есть запрос вставки, но когда я хочу вставить несколько столбцов в одном запросе, это дает ошибку - PullRequest
0 голосов
/ 09 января 2019

В скрипте Python у меня есть запрос на вставку, но когда я хочу вставить несколько столбцов в одном запросе, это выдает ошибку. но для одного запроса это работает отлично. Ниже мой код. моя база данных AWS S3.

A = [] #
for score_row in score:
    A.append(score_row[2])
    print("A=",A)

B = [] #
for day_row in score:
    B.append(day_row[1])
    print("B=",B)
for x,y in zip(A,B):
    sql = """INSERT INTO calculated_corr_coeff(date,Day) VALUES (?,?)"""
    cursor.executemany(sql, (x,),(y,))

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

sql = """INSERT INTO calculated_corr_coeff(date,Day) VALUES (?)"""
cursor.executemany(sql, (x,))

1 Ответ

0 голосов
/ 09 января 2019

Исправьте ваш код следующим образом:

sql = """INSERT INTO calculated_corr_coeff(date,Day) VALUES (?,?)"""
cursor.execute(sql, (x,y,))  #<-- here

Потому что это просто одна вставка (не несколько вставок)

Объяснение

Полагаю, вы ошиблись по поводу количества вставок (строк) и количества параметров (полей для вставки в каждой строке). Если вы хотите вставить несколько строк, используйте executemany, просто для одной строки вы должны использовать execute. Второй парапет в execute - это «список» (или последовательность) значений, которые нужно вставить в эту строку.

Alternative

Вы можете попытаться изменить синтаксис и вставить все данные в один кадр, используя ** синтаксис :

values = zip(A,B)   #instead of "for"
sql = """INSERT INTO calculated_corr_coeff(date,Day) VALUES (?,?)"""
cursor.executemany(sql, **values )

Обратите внимание, что этот подход не использует оператор for. Это означает, что все данные отправляются в базу данных за один вызов, это более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...