Вставьте первые 3 элемента 2D-массива в базу данных MySql - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть список с данными, такими как

infoarray[['1.', 'Name1', 'details1, '...', '...', '....'], ['2.', 'Name2, 'details2', '...', '...', '...'], ['3.', 'Name3', 'details3', '...', '...', '...']...]

Я просто хочу добавить первые 3 записи в таблицу базы данных в формате

[PLACE],[NAME],[DETAILS]

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

//using pymysql

cur = conn.cursor()

cur.executemany("""
    INSERT INTO 
        myTable
        (place, name, details)
    VALUES
        (%s, %s, %s)
""", infoarray)
db.commit()

cur.close()
conn.close()

Ошибка «Ошибка типа: не все аргументы, преобразованные во время форматирования строки», что означает, что мое форматирование неверно.Я относительно новичок в Python, поэтому я хорошо знаком с нюансами использования pymysql.

1 Ответ

0 голосов
/ 12 ноября 2018

Это происходит из-за того, что вы форматируете 3 значения в своем запросе, но передаете более 3 элементов на единицу времени.

Попробуйте изменить executemany вызов на:

cur.executemany("""
    INSERT INTO 
        myTable
        (place, name, details)
    VALUES
        (%s, %s, %s)
""", [a[:3] for a in infoarray])

ЭтоТаким образом, вы получите только первые 3 элемента в каждом элементе массива и передадите его executemany

...