GUI приложения на Python c Tkinter #7 - Удаление данных из таблицы базы SQLite 3
Вставка
- Опубліковано 6 лип 2019
- Седьмое видео из серии о создании GUI приложения на Python с Tkinter. В этом видео Мы научимся удалять ранее добавленные записи в базу данных SQLite 3. Познакомимся с SQL запросом: DELETE.
Иконка "Добавить позицию" - drive.google.com/file/d/0B8k1...
Иконка "Редактировать" - drive.google.com/file/d/1W0to...
Иконка "Удалить" - drive.google.com/file/d/19IiP...
Код с видео - gist.github.com/ithobbies/5ff...
Группа в VK - ithobbies
Телеграмм канал - t.me/ithobbies
Добрый день, я думаю будет полезно для других, что после создания 9 записей по id, 10 -я запись и последующие не будут удаляться, т.к. будет вылетать ошибка (sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.). Решением является дописать запятую (self.tree.set(select, '#1'),)) в запрос базу данных.
круто спасибо за баг репорт)
Спасибо большое!
Можете объяснить как запятая исправляет эту ошибку?
спасибо !
Ошибка в том, что надо передавать кортеж или список, поэтому добавляем запятую.
ура! еще одно видео спустя 3 месяца. Допишем это приложение через полтора года.
Слава Богу, наконец, нашёлся программист публикующий в русскоязычном интернете написание программ в графике. А то дальше пустого окна редко кто чего публикует. Продолжайте, Денис! Именно благодаря таких людей и развивается человеческое общество. Спасибо. С нетерпением жду новых полезных уроков и программ.
И Вам огромное спасибо
Спасибо большое за урок, очень полезно. Интересно было бы разобраться как на такой форме переключаться между несколькими таблицами))
Спасибо за видео. Очень помог разобраться во всем этом. ОЧЕНЬ хорошо объясняешь, чуть ли не разжевываешь (или да ?))) ) В общем большая тебе благодарность и надеюсь порадуешь еще каким-нибудь познанием в этой области. Поддерживаю самый последний комментарий о том, что даже через несколько лет люди будут искать помощи. ТЫ , мне помог !
Идея кошелька весьма интересная и практичная. Можно, к примеру сделать несколько разделов ("наличные", "карточки", "доллары")... А ещё (ВАЖНО!) вывести остаток средств. Лучше также, если вместо слов "Доход" и "Расход" будут выдаваться при доходе - положительные, а при расходе отрицательные числа - ещё лучше разного цвета.
Такие видео нужны, продолжай!
Уже готовлю
@@ITHobbies ждём) лайк подписка, колокольчик
Хорошие видео)
И подача)
Как раз то что надо)
Спасибо )
Лайк, подписка, колокольчик. Жду следующей серии!
Плюс к упомянутому в коментариях, есть проблемка при изменении размера столбцов в таблице, конкретно - правої граници слолбца СУММА. При разшерении столбец уходит за предели окна.
Доброго вечера, Денис!!! Все отлично!!! Вопрос: - как бы сделать подтверждение удаления, типа хотите удалить ДА НЕТ??? Ну и ждем следующего видео, про поиск по наименованию!!! ))) СПАСИБО)))
messagebox
Мину,с что еще с 5 видео шла ошибка небольшая и ты ее исправил лишь в конце 6 урока доходы и расходы не совпадали со столбцом ка и сумма , плохо что нет или убрал дату хотя в первых видео она есть.. Твои уроки без понтов и я думаю многим помогли и помогают не останавливайся!!!!! У тебя хорошо получается! Конечно получалось бы лучше если бы была у тебя команда....ты бы смог гораздо больше.
над такими лёгкими проектами работают в одиночку. и да, он не заметил эту ошибку, надо ещё самому досматривать) ну главное - суть он объяснил неплохо
Здравствуйте, спасибо большое за ваш труд! Недавно нашел эти видео - посмотрел залпом, лайк и подписка автоматом! Надеюсь, будут выходить чаще. Очень хочется узнать, как будет все это дело оборачиваться в экзешник и есть ли возможность поставлять в подобные десктопные приложения данные, получаемые с COM-порта (мучаюсь с Ардуино). Еще раз спасибо за видео)
учи с++
Видео и курс очень годные! Когда продолжение?
Человек ниже сказал нужную вещь. Может в то время это и не было таким интересным, но со временем просмотры наберутся. У нас просто проектная работа на похожую тему, материал неизвестно откуда. А ваш курс очень помогает!
Супер! очень доходчиво и понятно! Спасибо за уроки! Ждём новых уроков.
И скажем как здесь сделать чтобы при введении данных у нас фокус стоял на кнопке EDIT или OK скажем, чтобы можно было сразу нажать Enter после введения данных.
Ну и пожалуй ещё один интересный момент
при редактировании сделать так чтобы поля оставленные пустыми не изменялись в самой базе
Либо, редактирование записи по двойному щелчку, хотя предполагаю, что это может быть не доступно в sqlite 3(((
может в следующем выпуске сделать подтверждение удаления и сортировку позиций по возрастанию и убыванию для удобства чтения?
2 минуса. Шутка =)
1) Видео появляются редко
2) Вы говорите "ИХНЕЕ"
Теперь по сути.
1) Как сделать редактирование и удаление через нажатие правой кнопки мыши?
2) Как подтягивать данные в форму при редактировании?
3) Как реализовать запрет на ввод не типовых данных?
Прошу обратить внимание на то что запрет, а не проверку, тоесть чтобы не ставились цыфры в поле статья, а буквы в поле сумма
могу помочь с подтягиванием данных, если ещё нужно
@@user-cn2fp2ro9x Помогите, Мне тоже интересно!
@@user-cn2fp2ro9x Помогите, пожалуйста.
Отличный материал! Подскажите, выбор Windows 10 для разработки приложений на Python дает какие-то преимущества? Или все же писать на Linux-подобных системах будет удобнее? Т.е. есть ли разница какую ОС использовать для разработки на Python? Так как большинство всегда ратует за Linux, но по факту ведь и IDE и встроенные пакеты и библиотеки в Python одинаковы на любой ОС из двух указанных и, соответственно, все что написано во всех ваших уроках равнозначно будет работать и на Linux'сах?
Какую ОСь использовать дело предпочтений, python кроссплатформенный.
@@ITHobbies все так. Но в Линукс Python идёт из коробки, так сказать, и вроде как там более проще с некоторыми библиотеками при установке и при установке доп. модулей. Или же на Windows, MacOS все также ставится без проблем? Сам пока в основном использую Python на win10, но мои коллеги "пугают" меня, мол "переходи сразу на Линукс, потом с питоном будет сложнее на винде тебе"
@@lagunaolder3748 очень зря пугают, все на винде ок(но конечно, за исключением некоторых проблем, очень редко встречающихся)
спасибо.
решил проверить смогу ли я сам, без создания диалогового окна . поставил видео в начале на паузу.
за 3 минуты накопипастил и подправил имеющиеся методы и реализовал удаление без подтверждения. так, сейчас посмотрю проверю.
Получилось?
@@ITHobbies неверно цикл сделал, на одной записи ок, на нескольких падает.
Подписался, лайк почтави3, жду видос
Привет из 2022)
Если позволите, немного добавлю функционала.
Если в метод удавления добавить строку:
self.db.c.execute(“””DELETE FROM sqlite_sequence WHERE name = ‘тут название таблицы’”””)
то можно избежать «бага» с ROWID, который возникает из за автоинкремента, который, при удалении элемента, добавляет к следующему созданному ID ужаленного. (Был 12 id, его удалили, создали новый, а он, зараза, вместо 12 стал 13. Вот от этой занозы можно избавиться одной строкой😉)
Круто 👍
Расскажите подробнее (привет из 2023) эту строку добавлять вместо той которая в этом видеоуроке или в дополнение к ней? Потому что я добавляю и появляется ошибка: self.db.c.execute('''DELETE FROM sqlite_sequence WHERE name = ‘тут название таблицы''',(self.tree.set(selection_item, '#1'),))
sqlite3.OperationalError: no such table: sqlite_sequence Причём своё название таблицы что в кавычках, что без - результат всё равно ошибка
Сегодня наткнулся на ролики, почитал каменты. Это что теперь 2 месяца ждать следующий ролик?))
лайк, подписка и колокольчик и видео будут выходить чаще... всё зависит от Вас.
8+ месяцев, как видишь)
Когда видео?
здравствуйте, обнаружил упущение, запись можно удалить пока ID не двузначное/более чисто (10, 11, 12 ... 999...), затем выдает ошибку:
"File "директория в которой находится файл", line 63, in delete_records
self.db.c.execute('''DELETE FROM finance WHERE id=?''', (self.tree.set(selection_item, '#1')))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied."
нашел решение:
- вместо - self.db.c.execute('''DELETE FROM finance WHERE id= ? ''', (self.tree.set(selection_item, '#1')))
- необходимо - self.db.c.execute('''DELETE FROM finance WHERE id= ? ''', [self.tree.set(selection_item, '#1')])
@@pickleslover7041 , круто спасибо за баг репорт)
А если ничего не выделить и нажать кнопку "Редактировать"? Как сделать, чтобы в таком случае кнопка не работала?
Мне тоже интересно...
проверку надо сделать, там же есть метод tree.set
И что, его можно будет упаковать в ехе файл вместе с базой данных?
База будет лежать рядом с ехе
Никак не могу разобраться: почему удаление происходит лишь, когда id9 удаления не происходит, но на консоль выдаётся ошибка (хотя программа продолжает функционировать).
self.db.c.execute('''DELETE FROM finance WHERE id=?''', (self.tree.set(selection_item, '#1'),))
@@ITHobbies Спасибо. У меня была пропущена последняя запятая между скобок. Поставил - и функция заработала.
Это мой баг, в следующем видео исправлю
@@ITHobbies Ты конечно молодец, все по честному и ошибки и исправления , но программу не доделал и бросил,
нет суммирования по доходам и расходам и показания баланса .Минус, что нет команды запуска самой программы exe можно много продолжать долго, но за место под солнце стоит побороться ты зря остановился!
@@user-xz7ke3fe2h видео уже отснято, сейчас монтирую
Здравствуйте, вопрос про Child окна. Мы создали класс Child для дочерних окон и затем вызываем класс окна с помощью кнопки. То есть если я хочу создать ещё одно дочернее окно и вызвать его другой кнопкой, мне надо опять создать класс дочернего окна например child2? Я думал что класс создаётся один для миллион окон. Помогите кто знает.
просто фокус убери с дочернего окна и надела себе сколько хочешь окон. или просто в коде вызов функцию с параметром класса
@@dstddanilscraptd6875 Спасибо за ответ и совет, но фокус тут не причем.Ууже понял как делать, решил проблему
@@vassi2901 Как решил. Помоги!!!! В ответ скопируй своё решение сюда.. добрый человек
При добавлении больше 10 записей, ломается удаление конкретно set() начинает выдавать картеж. Это лечится?
"('''DELETE FROM finance WHERE id=?''', (self.tree.set(selection_item, '#1'),))" запятую влепите после (selection_item, '#1')
@@vladimirsekta4206 чудеса какие-то. Почему так работает?
@@user-ni5zx4pg6e Показывает что это кортеж из элементов.
На это у тебя ушло 2 года?
Все? Продолжения не будет?
Будет)
@@ITHobbies Дай Кофлер тебе стамины добрый человек)
Переведи)
@@ITHobbies 100000101001000011000010000111001100000100000110101000011111010001000100100001110111000011010110001000000100000100010000101000011010110000110001100001101011000001000100000110001000010100001100001000011110010000111000100001111011000100101110000010000110100100001111101000011000110001000000100010010111000011100110000010001000111100001101011000011101110000111110100001100101000011010110000111010101001
А ну так бы сразу
Кто поставил dislike, того не одобряю.
РОДНОЙ КУДА ПРОПАЛ !!???!
Жив, здоров, спасибо )