Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 08.03.2021
Сообщений: 173

Sqlite3

05.07.2021, 15:03. Показов 3267. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Имеем столбцы ID и текст в Базе данных(работаю через sqlite3.) Принцип прост- вводим текст,а id не вводим,оно должно вводиться рандомом(Пример-при вводе текста нажимаем кнопку,id заполняется автоматически рандомно).Внизу пример подключения Базы Данных.В коде ниже не представлено,но значения для БД заполняем с текстового поля. Буду рад даже совету.Спасибо заранее
Python
1
2
3
4
5
6
7
8
9
10
11
  def __init__(self):
        self.conn=sqlite3.connect("AvdeenkoR.db")
        self.c=self.conn.cursor()
        self.c.execute(
            '''CREATE TABLE IF NOT EXISTS AvdeenkoR(ID integer primary key, Текст text)''')
        self.conn.commit()
 
    def insert_data(self,ID,Текст):
        self.c.execute('''INSERT INTO AvdeenkoR(ID,Текст) VALUES (?, ?)''',
                       (ID, Текст))
        self.conn.commit()
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2021, 15:03
Ответы с готовыми решениями:

Sqlite3
Почему здесь result может равняться "None" con = sqlite3.connect("button.db") cur = con.cursor() cur.execute("UPDATE...

SQlite3 создание БД
Задание 1 Для каждого преподавателя: «ФИО преподавателя», «название кафедры», «должность преподавателя». import sqlite3 conn =...

Проверка в sqlite3
Вопрос состоит в том, чтобы выполнить проверку на существование данной записи в БД. Пишу как в документации, проводил небольшой дебаг, но...

10
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
05.07.2021, 21:43
Насколько я понял проблему, не инкриментируется id, если да,, то
Python
1
2
3
cur = conn.cursor()
        cur.execute(
            '''create table if not exists YourTable(id int auto_increment primary key not null, fnamee varchar(50) )''')
Добавлено через 2 минуты
Пример на операции
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import sqlite3
import sys
import os
import binascii
 
 
def reader(fname, nm):
    with open(fname, 'rb')as fp:
        content = fp.read()
        # print(binascii.hexlify(content))
        fhex = (binascii.hexlify(content))
    fp.close()
    try:
        conn = sqlite3.connect(nm + '.' + 'db')
        cur = conn.cursor()
        cur.execute(
            '''create table if not exists music(id int auto_increment primary key not null, muzname varchar(50), mfile blob not null)''')
 
        cur.execute("insert into music(id,muzname,mfile)values(1,'my',?)", (fhex,))
 
        cur.execute("select  * from music ")
        results = cur.fetchall()
        print(results)
        conn.commit()
        with open(nm + '.' + 'sql', 'w')as fp:
            for line in conn.iterdump():
                fp.write("%s\n" % line)
 
 
    finally:
        cur.close()
        conn.close()
 
    # print(fhex)
    return fhex
 
 
def reader1(fname, nm):
    with open(fname, 'rb')as fp:
        content = fp.read()
        # print(binascii.hexlify(content))
        fhex = (binascii.hexlify(content))
    fp.close()
    try:
        conn = sqlite3.connect(nm + '.' + 'db')
        cur = conn.cursor()
        cur.execute(
            '''create table if not exists music(id int auto_increment primary key not null, muzname varchar(50), mfile blob not null)''')
 
        cur.execute("select * from music")
 
        cur.execute("select  * from music ")
        results = cur.fetchall()
        print(results)
        conn.commit()
        with open(nm + '.' + 'sql', 'w')as fp:
            for line in conn.iterdump():
                fp.write("%s\n" % line)
 
 
    finally:
        cur.close()
        conn.close()
 
    # print(fhex)
    return fhex
 
 
def reader2(fname, nm):
    with open(fname, 'rb')as fp:
        content = fp.read()
        # print(binascii.hexlify(content))
        fhex = (binascii.hexlify(content))
    fp.close()
    try:
        conn = sqlite3.connect(nm + '.' + 'db')
        cur = conn.cursor()
        cur.execute(
            '''create table if not exists music(id int auto_increment primary key not null, muzname varchar(50), mfile blob not null)''')
 
        cur.execute("delete  from music")
 
        cur.execute("select  * from music ")
        results = cur.fetchall()
        print(results)
        conn.commit()
        with open(nm + '.' + 'sql', 'w')as fp:
            for line in conn.iterdump():
                fp.write("%s\n" % line)
 
 
 
    finally:
        cur.close()
        conn.close()
 
    # print(fhex)
    return fhex
 
 
def reader2(fname, nm):
    with open(fname, 'rb')as fp:
        content = fp.read()
        # print(binascii.hexlify(content))
        fhex = (binascii.hexlify(content))
    fp.close()
    try:
        conn = sqlite3.connect(nm + '.' + 'db')
        cur = conn.cursor()
        cur.execute(
            '''create table if not exists music(id int auto_increment primary key not null, muzname varchar(50), mfile blob not null)''')
 
        cur.execute("update music  set musnane='rock' where music.id=1")
 
        cur.execute("select  * from music ")
        results = cur.fetchall()
        print(results)
        conn.commit()
        with open(nm + '.' + 'sql', 'w')as fp:
            for line in conn.iterdump():
                fp.write("%s\n" % line)
 
 
 
    finally:
        cur.close()
        conn.close()
 
    # print(fhex)
    return fhex
 
 
if __name__ == '__main__':
    fhex = []
    nm = str(input("имя базы"))
    fname = '1.jpg'
reader(fname, nm)
reader1(fname, nm)
reader2(fname, nm)
0
2 / 2 / 0
Регистрация: 08.03.2021
Сообщений: 173
05.07.2021, 23:08  [ТС]
Не совсем понимаю где в вашей задаче выводится рандомный id
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
06.07.2021, 10:08
Лучший ответ Сообщение было отмечено FagotPetrova как решение

Решение

FagotPetrova, насколько я понял, в Вашей задаче ID не должно быть рандомным, что нарушидлло бы целостность базы, так как, судя по ее строению, id - как раз первичный ключ, а это значит, что он должен быть не рандомым, а автоинкрементным, и уникальным, то есть,, если первое значение поля id ==1, то второе - точно 2, затем 3 и т.д(кратковременность), а уникальность - если есть поле с номером n, то, то следующему полю нельзя дать тот же индекс.
Соответственно, в моем коде кусочек. который за это отвечает вот:
Python
1
2
3
cur = conn.cursor()
        cur.execute(
            '''create table if not exists YourTable(id int auto_increment primary key not null, fnamee varchar(50) )''')
И рандомность не нужна как факт, Вы же работаете с с БД, а туда значения вносятся по порядку, следовательно, чтобы решить Вашу проблему Вам нужно понять, что поле первичного ключа не должно быть заполняем юзером, соответственно, переписал бы так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sqlite3
 
 
def __init__(self):
    self.conn = sqlite3.connect("AvdeenkoR.db")
    self.c = self.conn.cursor()
    self.c.execute(
        '''CREATE TABLE IF NOT EXISTS AvdeenkoR(ID int auto_increment primary key not null, Текст text)''')  # cjplftv уникальное поле
    self.conn.commit()
 
    def insert_data(self, ID, Текст):
        # чтобы  заполнение точно начиналось с 1)
        self.c.execute(
            "INSERT INTO AvdeenkoR(Текст) VALUES (1, ?)", (Текст,))
 
        self.conn.commit()
3
2 / 2 / 0
Регистрация: 08.03.2021
Сообщений: 173
06.07.2021, 13:12  [ТС]
Спасибо за помощь.Но я просто использовал функцию random для id(поля для id и text заполнялись с entry).Но теперь еще вопрос есть(не сочтите за наглость).Я ввожу в entry то самое id(вводится от руки),и необходимо вывести текст, соответствующий этому id.Как это можно осуществить?
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
06.07.2021, 14:11
FagotPetrova, Вам нужно сделать так,, чтобы, когда Вы выбираете 1 по порядку id, Вам выдавался соответствующий ему текст?
Если да, то Вашими средствами сия проблема не решается, потому, что 1) Первичные ключи, которым является id - нельзя ставить рандомно, вводить в поле,от прихоти левой ноги и т.д., потому, что, любой первичный ключ может стать внешним, то есть AvdeenkoRб к примеру таблица певичного ключа, следовательно, если есть с ней связанная, то, свяязываться она должна по ключу, который задан в AvdeenkoRб первичным, а в связываемой таблице является внешним как работает, смотреть тут
По факту, если ключи именно инкриминируются, то, получается, что у нас есть 2 таблицы с любыми полями и условием вида: таблица внешнего ключа. поле как работаект join, но , такая выборка возможна только если эти самые ключи будут совпадать, а как они будут совпадать, коль Вы ставитие рандомные значения ключей, а потом просите, чтоб sql выбрал по ним соответствия.

Добавлено через 7 минут
а так вам просто не найдет соответствий ни один запрос и именно поэтому - нельзя ставить ключи от randomбвводить тоже нельзя, можно только использовать авто инкремент , иначе выходит классическая ошибка всех студеентов: в одной таблице бд, значения имеют первичные ключи с номерами от 1 до 59, в другой от 60 до до 100, если их связать, по внешним ключам, то даже напиши вы эталонный запрос - совпадений нужного Вам вида он не выдаст(потому, что значения ключей не совпадут)
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
06.07.2021, 14:28
FagotPetrova, При этом Ваше право вводить ключи откуда угодно за Вами есть(с точки зрения логики не верно, но, раз надо - то надо), поэтому если получать ключи из полей ввода, то, контролировать целостность базы Вам придется в ручную.
0
2 / 2 / 0
Регистрация: 08.03.2021
Сообщений: 173
09.07.2021, 10:04  [ТС]
Спасибо.То,что вы написали понятно.Но есть задание-пусть и неверное.Я сделал очень просто-x это рандомное число,его вставляю в поле и по кнопке каждый раз вывожу этот рандом.Затем этот x используется при вставке в БД.И да,понимамаю проблему с повтором,но если рандом ставить скажем на 1000,а записей будет 50,вероятность низка
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
09.07.2021, 10:15
FagotPetrova, а привести задание (дословно), можете(вдруг- помогу чем))?
И еще, за свою жизнь, я решал много таких заданий, а принцип был один: есть языки,либо - методики в них есть правила и ни один преподаватель не может эти правила колебать, потому, что говоря, что 2*2=99(к примеру), он будет ошибаться,при всем уважении к его званиям, заслугам и т.д. а я -такие ошибки допускать не буду, плюс к тому, за мной- какой-никакой, да опыт в проектировании БД, потому, Вам с ходу говорил, что так можно, так нельзя, а так - не надо, что сам на этом ошибался.
В любом случае, я даю совет, Вам решать, как быть.
0
2 / 2 / 0
Регистрация: 08.03.2021
Сообщений: 173
09.07.2021, 10:20  [ТС]
Задание то несложное,ниже сам текст привожу.Программу кстати доделал.Не говорится,что id это ключ,но я это так понял.Так как таблица одна,возможно и не употребляется такое понятие как ключ впринципе тут
Реализовать оконный интерфейс для загрузки и хранения текстовых фрагментов(Использовать SQLite3)

1. В ручную пишем текст
2. Нажимаем кнопку загрузить
3. Генерируется случайное число(через метод рандом), создается в таблице id, название текста(Там же и хранится).
4. Вводим id текста
5. Нажимаем кнопку прочитать
6. Выводится текст, который мы сохраняли

Хотя если поможете вот с этой ерундой,буду рад

Вопрос пустяковый, но что то не могу решить.Нужен перенос строки на следующую при окончании ширины поля при введении символов в текстовое поле вручную.Раньше использовал Text.Но сейчас почему-то не работает(Заблудился в 3 соснах).Ниже фрагмент для этого самого текстового поля.Весь код не привожу,так как если мы меняем Text на Entry,то всё работает
Python
1
2
3
4
x = random.randint(0, 1000)
self.entry_description = Text(self,wrap=TEXT)
self.entry_description.place(x=200,y=50)
self.entry_description.insert(1.0,x)
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
09.07.2021, 10:37
а вот так?
Python
1
2
3
4
5
6
7
8
from tkinter import *
root = Tk()
 
text = Text(width=25, height=5, bg="darkgreen",
            fg='white', wrap=WORD)
 
text.pack()
root.mainloop()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.07.2021, 10:37
Помогаю со студенческими работами здесь

Sqlite3.OperationalError
Собственно первое знакомство вышло не удачным.... Все манипуляции провожу на Pycharm. Подскажите пожалуйста, проблем как я понимаю...

Ослепший sqlite3(?)
def coffee_load(self): cursor = self.connect.cursor() res = cursor.execute("""select coffee.id, coffee.title,...

Работа с sqlite3
Задача: создать базу куда можно добавлять сотрудников и удалить их. Я удаляю сотрудников по номеру id, но не знаю как сделать так, чтобы...

Sqlite3.OperationalError: no such column: r
Начинаю изучать SQLite и столкнулся с такой проблемой.Как переменную передать в SQL? # Импорт библиотеки import sqlite3 #...

PyQt5 + SQLite3 (db browser)
Здравствуйте. Прошу помогите, я не понимаю что не так. Я написал код для кнопки Логин, и подключил базу данных. То-есть при нажатии...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru