#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)
и включить это в Q2.
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