Python Sqllite3: вставка сразу нескольких списков разной длины - PullRequest
0 голосов
/ 10 января 2020

Подскажите, пожалуйста, как вставить многие списки в python? Я пробовал приведенный ниже код, но проблема в том, что когда я вставляю данные, они вставляются в одно поле таблицы для каждого моего списка.

Вторая проблема: каждый список имеет разную длину, потому что когда я попытался вставить все списки вместе в одном SQL выполнении, OUTPUT был List index out of range

Пожалуйста, помогите мне с правильной формулой кода.

Вот список тестов:

ListLinks = ["Link 1", "Link 2", "Link 3", "Link 4", "Link 5", "Link 6", "Link 7", "Link 8", 
"Link 9", "Link 10"]

ListNames = ["Name 1", "Name 2", "Name 3", "Name 4", "Name 5", "Name 6", "Name 7", "Name 8", 
"Name 9", "Name 10"]

ListAddress = ["Add 1", "Add 2", "Add 3", "Add 4", "Add 5", "Add 6", "Add 7", "Add 8", "Add 9", 
"Add 10"]

ListPhone = ["Phone 1", "Phone 2", "Phone 3", "Phone 4", "Phone 5", "Phone 6", "Phone 7", "Phone 
8", "Phone 9", "Phone 10"]

ListCategory = ["Cat 1", "Cat 2", "Cat 3", "Cat 4", "Cat 5", "Cat 6", "Cat 7", "Cat 8", "Cat 9", 
"Cat 10"]

ListDirection = ["Dir 1", "Dir 2", "Dir 3", "Dir 4", "Dir 5", "Dir 6", "Dir 7", "Dir 8", "Dir 
9", "Dir 10"]

А вот пример моего кода:

import sqlite3
def InsertDB(listOne, listTwo, listThree, listFour, listFive, listSix):
    connection = sqlite3.connect("SQLTestDB.db")
    cursor = connection.cursor()
    cursor.execute("""create table if not exists YellowCompanies(CompanyLink text,CompanyName text,CompanyAddress text,CompanyPhone text,CompanyCategory text,CompanyDirection text)""")
    connection.commit()
    for Index1 in range(len(listOne)):
        DataOne = listOne[Index1]
        cursor.execute("INSERT INTO YellowCompanies (CompanyLink) VALUES (?)", ((DataOne,)))
        connection.commit()
    for Index2 in range(len(listTwo)):
        DataTwo = listTwo[Index2]
        cursor.execute("INSERT INTO YellowCompanies (CompanyAddress) VALUES (?)", ((DataTwo,)))
        connection.commit()

    for Index3 in range(len(listThree)):
        DataThree = listThree[Index3]
        cursor.execute("INSERT INTO YellowCompanies (CompanyCategory) VALUES (?)", ((DataThree,)))
        connection.commit()

    for Index4 in range(len(listFour)):
        DataFour = listFour[Index4]
        cursor.execute("INSERT INTO YellowCompanies (CompanyDirection) VALUES (?)", ((DataFour,)))
        connection.commit()

    for Index5 in range(len(listFive)):
        DataFive = listFive[Index5]
        cursor.execute("INSERT INTO YellowCompanies (CompanyName) VALUES (?)", ((DataFive,)))
        connection.commit()

    for Index6 in range(len(listSix)):
        DataSix = listSix[Index6]
        cursor.execute("INSERT INTO YellowCompanies (CompanyPhone) VALUES (?)", ((DataSix,)))
        connection.commit()

    connection.commit()
    connection.close()

1 Ответ

0 голосов
/ 10 января 2020

Попробуйте, прокомментируйте, если вам нужно объяснить

import sqlite3
def InsertDB(listOne, listTwo, listThree, listFour, listFive, listSix):
    connection = sqlite3.connect("SQLTestDB.db")
    cursor = connection.cursor()
    cursor.execute("""create table if not exists YellowCompanies(CompanyLink text,CompanyName text,CompanyAddress text,CompanyPhone text,CompanyCategory text,CompanyDirection text)""")
    connection.commit()

    # Zip to list of tuples
    values = zip(listOne, listTwo, listThree, listFour, listFive, listSix)
    # Building values for sql
    sql = "INSERT INTO YellowCompanies VALUES {}".format(', '.join(map(str, values)))
    cursor.execute(sql)
    connection.commit()
    connection.close()

Если список составлен из пользовательского ввода, то это не версия, которая предотвращает внедрение sql, также если список содержит один или ноль элементов, это может вызвать ошибку

...