Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686

Запись значений в SQLite3

03.01.2022, 17:59. Показов 1808. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
При записи в базу данных SQLite3 возникает ошибка
Код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from bs4 import BeautifulSoup
import csv
import sqlite3
 
 
def write_sqlite3(data):
    base = sqlite3.connect('folding_courses .db')
    cur = base.cursor()
 
 
    base.execute('CREATE TABLE IF NOT EXISTS users (course_name TEXT PRIMARY KEY AUTOINCREMENT NOT NULL, author TEXT NOT NULL)')
    base.commit()
 
    #users = [['jonny123', '123456'], ['billy123', 'password']]
    users = [data['name'], data['author']]
 
    for user in users:
        try:
            cur.execute('INSERT INTO users VALUES(?, ?)',('name', 'author'))
        except sqlite3.IntegrityError as err:
            print(f"Database error: {err}")
 
    base.commit()
 
 
def write_csv(data):
    with open('club_entry.csv', 'a', encoding="utf8") as f:
        writer = csv.writer(f)
        writer.writerow([data['name'],
                         data['author']
                         ])
        f.close()
 
 
def write_txt(data):
    with open("club_entry.txt", "a+", encoding="utf8") as f:
        try:
            f.writelines([data['name'],
                          data['author']
                          ])
            f.write('\n')
        finally:
            f.close()
 
 
def create_str():
    soup = BeautifulSoup(open("index_selenium.html", encoding="utf8"), "lxml")
    for i in range(1, 21):
        str = ' '.join(soup.find('a', id=f'js-XFUniqueId{7 + 2 * i}').text.replace("\n", "").replace(')', '').split())
        str = str.split('@')
        str = str[0].split('(')
        data = {'name': str[0].strip(),
                'author': str[1].strip()
                }
        write_csv(data)
        # write_txt(data)
        write_sqlite3(data)
 
def main():
    create_str()
 
 
if __name__ == '__main__':
    main()
Ошибка. Не могу понять её. Откуда берётся третья колонка. Прошу помощи.
Code
1
2
3
4
5
6
7
8
9
10
11
12
Traceback (most recent call last):
  File "C:\Users\user\openpage\mainn.py", line 64, in <module>
    main()
  File "C:\Users\user\openpage\mainn.py", line 60, in main
    create_str()
  File "C:\Users\user\openpage\mainn.py", line 57, in create_str
    write_sqlite3(data)
  File "C:\Users\user\openpage\mainn.py", line 19, in write_sqlite3
    cur.execute('INSERT INTO users VALUES(?, ?)',('name', 'author'))
sqlite3.OperationalError: table users has 3 columns but 2 values were supplied
 
Process finished with exit code 1
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2022, 17:59
Ответы с готовыми решениями:

Как не допустить запись дубликатов в SQLite3
Здравствуйте. Всех с наступившим Новым годом!!! Такой код базы. Хотел использовать PRIMARY KEY. Чтобы не было дубликата. При повторном...

Запись в SQLite3
Здравствуйте, вопрос такой, можно ли редактировать одну и ту же запись в SQLite чтобы не получалось так как на скрине. Код представлен...

Ввод значений в sqlite3 c использованием PyQt
Только начинаю что-то делать в sqlite и PYQT Функция click_btn при нажатии должна по идее добавлять в базу новой строкой информацию...

8
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
03.01.2022, 18:39
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

Цитата Сообщение от vlad56 Посмотреть сообщение
Ошибка. Не могу понять её. Откуда берётся третья колонка. Прошу помощи
Может у тебя там уже есть таблица с 3 колонками.
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
03.01.2022, 18:51
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

Файл 'folding_courses .db' удалите, вы в коде поменяли структуру БД, а в файле БД который был создан по старой структуре она естественно осталась старой...

Добавлено через 9 минут
Наверняка там было поле id из моего прошлого примера, которое вы зачем-то удалили. Я его не просто так добавил, обычно в таблицах принято иметь поле с цифровым идентификатором, например для создания связей с другими таблицами.
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
03.01.2022, 18:53  [ТС]
Спасибо. Да действительно была база с тремя колонками. Удалил. Но теперь другой заскок.
Код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from bs4 import BeautifulSoup
import csv
import sqlite3
 
 
def write_sqlite3(data):
    base = sqlite3.connect('folding_courses .db')
    cur = base.cursor()
 
 
    base.execute('CREATE TABLE IF NOT EXISTS users (course_name TEXT PRIMARY KEY AUTOINCREMENT NOT NULL, author TEXT NOT NULL)')
    base.commit()
 
    #users = [['jonny123', '123456'], ['billy123', 'password']]
    #users = [[data['name']], [data['author']]]
    users = [data['name'], data['author']]
    for user in users:
        try:
            cur.execute('INSERT INTO users VALUES(?, ?)',('name', 'author'))
        except sqlite3.IntegrityError as err:
            print(f"Database error: {err}")
 
    base.commit()
 
 
def write_csv(data):
    with open('club_entry.csv', 'a', encoding="utf8") as f:
        writer = csv.writer(f)
        writer.writerow([data['name'],
                         data['author']
                         ])
        f.close()
 
 
def write_txt(data):
    with open("club_entry.txt", "a+", encoding="utf8") as f:
        try:
            f.writelines([data['name'],
                          data['author']
                          ])
            f.write('\n')
        finally:
            f.close()
 
 
def create_str():
    soup = BeautifulSoup(open("index_selenium.html", encoding="utf8"), "lxml")
    for i in range(1, 21):
        str = ' '.join(soup.find('a', id=f'js-XFUniqueId{7 + 2 * i}').text.replace("\n", "").replace(')', '').split())
        str = str.split('@')
        str = str[0].split('(')
        data = {'name': str[0].strip(),
                'author': str[1].strip()
                }
        write_csv(data)
        # write_txt(data)
        write_sqlite3(data)
 
def main():
    create_str()
 
 
if __name__ == '__main__':
    main()
Пишет
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
C:\Users\user\AppData\Local\Programs\Python\Python310\python.exe C:/Users/user/openpage/mainn.py
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
Database error: UNIQUE constraint failed: users.course_name
 
Process finished with exit code 0
Прошу помощи.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
03.01.2022, 18:59
Лучший ответ Сообщение было отмечено vlad56 как решение

Решение

Python
1
cur.execute('INSERT INTO users VALUES(?, ?)',('name', 'author'))
->
Python
1
cur.execute('INSERT INTO users VALUES(?, ?)',(user[0], user[1]))
?

А лучше вообще убрать
Python
1
2
    users = [data['name'], data['author']]
    for user in users:
и сделать
Python
1
cur.execute('INSERT INTO users VALUES(?, ?)',(data['name'], data['author']))
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
03.01.2022, 19:13  [ТС]
Моя задача собрать базу данных по названиям курсов с одного сайта. И потом сравнить их с базой данных названий курсов из других сайтов. Какая может быть связь одной базы с другими я пока не знаю. А вот поиск совпадающих названий мне как раз и надо. Поэтому на данном моменте мне кажется, что в первом столбце должны быть названия. Как только я пытаюсь вставить ещё такое же название, я буду сразу об этом знать. Что мне и нужно. Спасибо за помощь.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
03.01.2022, 19:45
Цитата Сообщение от vlad56 Посмотреть сообщение
А вот поиск совпадающих названий мне как раз и надо.
Для этого достаточно на нужный столбец добавить ограничение UNIQUE.
Python
1
base.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, course_name TEXT NOT NULL UNIQUE, author TEXT NOT NULL)')
1
9 / 7 / 2
Регистрация: 06.03.2012
Сообщений: 686
03.01.2022, 20:58  [ТС]
Чего то опять не могу понять. Код исполняется без ошибок. Записей в базе данных только одна. Что делать?
Код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from bs4 import BeautifulSoup
import csv
import sqlite3
 
 
def write_sqlite3(data):
    base = sqlite3.connect('folding_courses .db')
    cur = base.cursor()
 
 
    base.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, course_name TEXT NOT NULL UNIQUE, author TEXT NOT NULL)')
    base.commit()
 
    try:
        cur.execute('INSERT INTO users VALUES(?, ?, ?)',(None, data['name'], data['author']))
    except sqlite3.IntegrityError as err:
        print(data['name'],'. ','АВТОР',' - ', data['author'])
        #with open("Совпадающие названия.txt", "a+", encoding="utf8") as f:
           # try:
                #f.writelines([data['name'],'. ','АВТОР',' - ', data['author']])
                #f.write('\n')
            #finally:
                #f.close()
 
    base.commit()
 
 
def write_csv(data):
    with open('club_entry.csv', 'a', encoding="utf8") as f:
        writer = csv.writer(f)
        writer.writerow([data['name'],
                         data['author']
                         ])
        f.close()
 
 
def write_txt(data):
    with open("club_entry.txt", "a+", encoding="utf8") as f:
        try:
            f.writelines([data['name'],
                          data['author']
                          ])
            f.write('\n')
        finally:
            f.close()
 
 
def create_str():
    soup = BeautifulSoup(open("index_selenium.html", encoding="utf8"), "lxml")
    for i in range(1, 21):
        str = ' '.join(soup.find('a', id=f'js-XFUniqueId{7 + 2 * i}').text.replace("\n", "").replace(')', '').split())
        str = str.split('@')
        str = str[0].split('(')
        data = {'name': str[0].strip(),
                'author': str[1].strip()
                }
        write_csv(data)
        # write_txt(data)
        write_sqlite3(data)
 
def main():
    create_str()
 
 
if __name__ == '__main__':
    main()
Добавлено через 5 минут
Всё заработало. Спасибо за помощь
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
03.01.2022, 21:03
Python
1
cur.execute('INSERT INTO users VALUES(?, ?, ?)',(None, data['name'], data['author']))
Нужно так же использовать 2 значения для вставки, первая клонка сама заполнится.
Если много записей надо вставить, то надо использовать
Python
1
cur.executemany('INSERT INTO users VALUES(?, ?)',(data['name'], data['author']))
Добавлено через 1 минуту
Только я не помню, как точно это работает, в каком виде коллекцию надо передавать.

Добавлено через 1 минуту
Наверно так
Python
1
cur.executemany('INSERT INTO users VALUES(?, ?)',(data))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2022, 21:03
Помогаю со студенческими работами здесь

Запись данных в sqlite3
Добрый вечер. Есть есть программка с разными версиями,они расположены в разных папках и база у каждого своя с одинаковым именем,например...

SQLite3 запись данных
УВАЖАЕМЫЕ МОДЕРАТОРЫ!!! у меня создана подобная тема в разделе Unity, но почитав что библиотека мультиплатформенная решил создать тему и...

Запись текстовых данных из массива в БД SQLite3
Всем привет! Проблема заключается вот в чем: в массиве находятся текстовые записи разной длинны (от 15 до 6000 знаков). При...

Как сделать запись в БД Sqlite3 с полей в боте
Условно есть бот и его код таков, что при нажатии кнопки, появляется сообщение введи емейл Больше ничего нет. Пользователь...

нужна рабочая связка sqlite3.dll + SQLite3.pas + SQLiteTable3.pas
Всех приветствую. Начинающий уровень. Не смог добиться (не смог найти решения в интернете) записи и чтения кириллицы из Делфи 7 в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru