Ошибка вставки: «OperationalError: такой столбец отсутствует» - PullRequest
2 голосов
/ 21 апреля 2019

Я пытался создать базу данных с именами и телефонами, которые я пытался исправить, но она воспроизводилась мне в любое время:

File "exm0.py", line 14, in <module>
    cursor.execute("""INSERT INTO Employee VALUES({0}, {1})""".format(k, v))
sqlite3.OperationalError: no such column: dani

Код:

from user_names import *
import sqlite3

# user_names.py
names = ["dani", "eric", "dinna", "tamir", "edan", "daniel", "tomer", 
"noa", "shalev", "tom", "shir"]
phones = ["0432", "5415166255", "61467254", "6146758", "5889482"]

connection = sqlite3.connect("")
cursor = connection.cursor()


cursor.execute("""CREATE TABLE Employee(Name text, Phone int)""")
acc = {}

for k, v in zip(names, phones):
    #acc[k] = v
    cursor.execute("""INSERT INTO Employee VALUES({0}, 
{1})""".format(k, v))

Ответы [ 3 ]

0 голосов
/ 21 апреля 2019

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

for k, v in zip(names, phones):
    #acc[k] = v
    cursor.execute("INSERT INTO Employee (Name, Phone) VALUES(?,?)", (k, v))
0 голосов
/ 21 апреля 2019

Вы форматируете значения в тексте заявления без кавычек. Таким образом, база данных интерпретирует их как имена столбцов и, таким образом, завершается с ошибкой, которую вы видите. Вместо этого вы можете просто передать массив параметров в качестве второго аргумента функции execute и позволить библиотеке драйверов выполнить за вас тяжелую работу:

cursor.execute("INSERT INTO Employee VALUES(?, ?)", [k, v])
0 голосов
/ 21 апреля 2019

Не выполняйте форматирование строк, используйте подготовленный оператор с заполнителями.

for k, v in zip(names, phones):
    #acc[k] = v
    cursor.execute("INSERT INTO Employee VALUES(?, ?)", (k, v))

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

cursor.executemany("INSERT INTO Employee VALUES(?, ?)", zip(names, phones))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...