Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 19, 2019 12:47:10

JJ39
Зарегистрирован: 2019-06-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

Добрый день, опишу ситуацию.
Выгружаю базу данных в приложение на python Tkinter.
Вывожу данные в Поля Entry(скрин 1)
Как редактировать эти записи? Возможно ли редактировать, а потом просто сохранять или обязательно использование языка SQLite?

Прикреплённый файлы:
attachment Безымянный.png (11,2 KБ)

Офлайн

#2 Июнь 20, 2019 18:25:12

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

После изменения содержимого Entry необходимо, через команды SQLite, внести эти изменения в БД. Делаем это sqlite-вским UPDATE, который вызывается через cursor.execute(“UPDATE и т.д.”), затем закрепляется комнадой cursor.commit(), если не ошибаюсь. Вкратце, как-то так.

Офлайн

#3 Июнь 21, 2019 07:10:41

JJ39
Зарегистрирован: 2019-06-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

Rafik
я не понимаю как данные из редактироваемого Entry передать в базу. get.entry- передаёт последнюю ячейку.
Так же я не знаю как передать в set нужный столбик.

 cursor.execute("UPDATE {} SET {}=get.entry WHERE = 1;".format(all_table))
Я могу сделать к каждой ячейки, но мне необходимо, чтобы работа была автоматизированна.

Прикреплённый файлы:
attachment Безымянный.png (11,8 KБ)

Офлайн

#4 Июнь 21, 2019 07:51:23

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4121
Репутация: +  251  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

JJ39
языка SQLite?
Языка SQLite не существует. Есть SQL
JJ39
или обязательно использование языка SQL?
SQLite используют когда кровь из носу хотят использовать SQL.
Еще причина - данные не лезут в память. Но
JJ39
Выгружаю базу данных в приложение
Значит у вас это не проблема.
Тогда зачем вы вообще SQLite используете????
JJ39
но мне необходимо, чтобы работа была автоматизированна.
Это непонятно. как при написании программы вообще можно сделать не автоматизированно.

У меня сложилось впечатление что ваш уровень владения инструментами (python, sql, Tkinter) недостаточен для решения задачи.

Я бы посоветовал не учить все вместе а решать задачу поэтапно.

Если нужна автоматизация то GUI только вредит. Выкидываете TKinter,SQLite решаете задачу чисто на питоне. Сохраняете/восстанавливаете при помощи pikle или csv. Дальше осваиваете numpy/pandas. потом TK. Если он вообще нужен.



Офлайн

#5 Июнь 21, 2019 10:43:41

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

Для начала, при создании поля ввода на Entry и не только на нём, необходимо привязать каждое поле к переменной tkinter. Для этого объявляем необходимые переменные tkinter-а (StringVar(), DoubleVar(), IntVar()), затем привязываем к полю ввода требуемую переменную. Для заполнения поля Entry требуемым значением достаточно изменить привязанную переменную через его атрибут set(). Для получения значения из поля ввода читаем содержимое переменной через его get().
В Вашем случае лучше всего организовать хранение переменных в списке, который будет содержать строку таблицы в виде списка, т.е. будет список в списке.

 from tkinter import *
tbl1 = []
stroka1 = []
# Заполняем одну строку
for x in range(5):
    stroka1.append(StringVar())  # Entry поддерживает только текст?
# Заполняем таблицу тремя строками
for x in range(3):
    tbl1.append(stroka1[:])
# Теперь tbl1[0] это будет первая строка, а в tbl1[1][2] - это третья колонка второй строки
# Думаю, идея понятна.
# tbl1[0][1].set("slovo") - во вторую колонку третьей строки будет загружено значение "slovo"
# tbl1[0][2].get() - получим значение третьей колонки первой строки
# Привязка к Entry первой колонки первой строки
poleA1 = Entry(master=fram_tbl, textvariable=tbl1[0][0], далее другие параметры)
# Привязка к Entry второй колонки первой строки
poleB1 = Entry(master=fram_tbl, textvariable=tbl1[0][1], далее другие параметры)
# Набивку окна полями ввода можно сделать в цикле не именовывая их
# Для обращения к полю ввода не нужно его имя, достаточно привязанной tkinter.переменной

Отредактировано Rafik (Июнь 21, 2019 11:04:42)

Офлайн

#6 Июнь 22, 2019 12:21:55

JJ39
Зарегистрирован: 2019-06-04
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

Rafik
Спасибо вам большое, в моих знания есть пробелы, но время не терпит, курсовую надо сдавать. Не будет проблем если у меня разное количество столбцов в таблицах?
P.S Почему то не могу повысить вам репутацию!

Офлайн

#7 Июнь 24, 2019 08:22:34

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Изменение, удаление , редактирование данных. Sqlite3

JJ39
Не будет проблем если у меня разное количество столбцов в таблицах?
Здесь можно сделать так: выбрать таблицу с максимальным количеством столбцов и сделать окно под неё. Для остальных, где столбцов меньше - делать лишние Entry как readonly и предварительно очистить их переменные.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version