Вставить список списков в базу данных Python

#python #database #list #sqlite

#python #База данных #Список #sqlite

Вопрос:

Я пытаюсь вставить список списков в базу данных, но я получаю эту ошибку » cursor.execute(‘ВСТАВИТЬ В тестовые ЗНАЧЕНИЯ(?, ?, ?)’,list2) sqlite3.Ошибка программирования: указано неверное количество привязок. В текущем операторе используется 3, а их указано 200.» в моем списке списков есть 201 список

 import sqlite3
import csv
import pandas as pd
def Load():
    list1 = []
    comparar = []
    conexion = sqlite3.connect("Pruebas")
    cursor = conexion.cursor()
    cursor.execute('CREATE TABLE IF NOT EXISTS Test ( "id" INT NOT NULL , "User" TEXT NOT NULL , "Followed" INT NOT NULL , PRIMARY KEY (id))')
    cursor.execute("SELECT * FROM Test")
    list1 = cursor.fetchall()
    #print(data)    
    data = pd.read_csv(r'J:\Proyectos y Trabajos\Python\Bot Instagram Follow\Terminado BR\Test.csv',delimiter=';')
    tuples = [tuple(x) for x in data.values]
    
    for i in tuples:
        if i not in list1:
            list1.append(i)
    list2 = [list(elem) for elem in list1]
    
    cursor.execute("DELETE FROM Test") 
    conexion.commit() 
    cursor.execute('INSERT INTO Test VALUES(?, ?, ?)',list2)
    conexion.commit() 
    conexion.close()
Load()
  

Комментарии:

1. попробуйте cursor.execute('INSERT INTO Test VALUES(?, ?, ?)',(list2,)) и дайте мне знать, но можете ли вы также указать print(list2) и включить это в Q

2. VALUES(?, ?, ?) означает, что вы пытаетесь вставить три значения. list2 Имеет ровно три значения?

3. Сейчас я получаю эту ошибку: File «j:/Proyectos y Trabajos/Python/Бот Instagram Follow/Terminado BR/app.py», строка 23, в Load cursor.execute(‘ВСТАВИТЬ В тестовые ЗНАЧЕНИЯ(?, ?, ?)’,( список 2,)) sqlite3. Ошибка программирования: указано неверное количество привязок. В текущем операторе используется 3, и есть 1 предоставленный.

4. List2 — это список из 201 списка, и в каждом из них есть 3 значения внутри, подобные этому ‘[201, ‘rodrigo_petrizzo’, 0]’

5. Это не то, как вы это вставляете. Одним из способов было бы перебрать список и по отдельности вставить каждый фрагмент.

Ответ №1:

Выполните итерацию list2 и выполните вставку значений в каждом вложенном списке:

 for sublist in list2:
    cursor.execute('INSERT INTO Test VALUES(?, ?, ?)', sublist)
connexion.commit()
  

Комментарии:

1. Разве так не должно быть (sublist,) ?

2. @CoolCloud Нет, я так не думаю. sublist, — это последовательность из одного значения, но вам нужна последовательность из трех значений, чтобы соответствовать трем маркерам-заполнителям.

3. О да, возможно, в этом есть смысл: D