Python SQLite #9: методы execute, executemany, executescript, commit, rollback и свойство lastrowid
HTML-код
- Опубликовано: 22 авг 2024
- Инфо-сайт: proproprogs.ru
Порядок взаимодействия с СУБД SQLite через API модуля sqlite3 на языке Python. Рассматриваются методы: execute, executemany, executescript, commit, rollback и свойство lastrowid.
Спасибо!
Для обновления БД в программе не обязательно загружать его заново, достаточно нажать "F5"
Еще раз скажу что Ваш канал это огромная кладезь знаний!!!🤌👌🙏спасибо за Ваш труд!
качество и объяснения на высшем уровне
Качественные уроки.
Выражаю свою благодарность автору, чья подача материала просто шикарна! Спасибо.
Спасибо за качественную работу
Уже несколько месяцев я пытаюсь понять что такое апи. Смотрел ролики разные, определение читал, а тут просто объяснили что это методы пакета. Я очень рад, что это не что-то сложное и непонятное)
API - описание способов взаимодействия одной компьютерной программы с другими. Это только в данном частном случае - методы пакета.
Спасибо за урок, очень доступно объясняете
НАСТОЯЩИЙ МАСТЕР, БЛАГОДАРЮ ЗА ОТЛИЧНЕЙШИЙ МАТЕРИАЛ И ЕГО ПОДАЧУ !!!
Спасибо за Ваши уроки!
смотрю как и весь контент топ Сергея)
Отличный урок, большое спасибо.
Лайк, коммент в поддержку канала!
Отличный курс)
🔥🔥🔥🔥
почему comit мы использовали в блоке try а не в блоке finally? ведь в этом случае если было много операций с БД до возникновения ошибки, то все операции будут потеряны. Но если записать commit в блок finally , то все операции с БД перед ошибкой сохранятся.
ЗЫ: Не досмотрел немного до rollback: вопрос выше отпадает, но возникает другой: зачем делать rollback если мы не делаем комит? ведь изменения без комит всё равно не сохранятся, а в блоке файнали БД закроется без сохранения изменений.
ЗЫ: ЗЫ: Всё, досмотрел дальше. Все вопросы отпали.
ЗЫ: ЗЫ: ЗЫ: не, не отпали вопросы. Только что проверил, без ролбэк таблица все равно остается пустой при ошибке, так как комит не срабатывает при ошибке.
ЗЫ: ЗЫ: ЗЫ: ЗЫ: почитал как работает rollback и примерно понял зачем он тут используется. если база данных не будет закрыта, а ошибка просто про игнорируется, то при продолжении работы с таблицей может возникнуть путаница, какие данные уже внесли а какие еще нет. В этом случае, что бы не было путаницы делаем ролбэк до какой то точки, и затем продолжаем работать с этой точки. В данном видео это не актуально так как бд закрывается без комита и все изменения теряются.
Я не уверен что правильно разобрался, так что прошу поправить меня если я не прав.
Божественный урок, но хотелось бы, чтобы вместе с материалом прикреплялись и исходники.
Спасибо, теперь делаю с исходниками, а здесь да, их нет. Как вариант можно посетить сайт proproprogs.ru там излагаются те же самые занятия и можно копировать некоторые тексты программ.
изучил базовый синтаксис, ООП, посмотрел курс по джанго, прохожу Git, досматриваю SQLite, ТАК и не сформировалось точное понимание что такое API (о котором слышно везде) это видео закинуло новый пазл
Спасибо!
Выглядит так, что в приведённом примере с rollback() использование этого метода избыточно. Из-за ошибки поток выполнения не дойдёт до коммита, результат транзакций в любом случае не сохранится и таблица останется пустой
Хороший урок, спасибо! Скажите, а как быть если добавить нужно не одну запись, а скажем 1000 или 10000? Если формат json, csv или xml? И как в этом случае автоматически определить типы столбцов, не прописывая их в ручную?
Спасибо большое за урок, сложно но интересно очень.
Если можно, подскажите, почему при параметре BEGIN; после каждой строки SQL-запроса нужно указывать точку с запятой, а не запятую? Это особенности использования параметра BEGIN или какая-то другая особенность, которую я упустил?
Мы там указываем группу команд, поэтому каждая команда разделяется точкой с запятой - общепринятный синтаксис )
@@selfedu_rusСпасибо.
Если ставить "," то sqlite3.OperationalError: near ",": syntax error, и запятой обычно перечесляют параметры запроса, а не сам запрос
А как сделать так что бы участника вносить в базу данных?,я просто делаю бд для бота в вк и не могу понять как сделать так что бы бот вносил человека в бд автоматически
Подскажите, пожалуйста. В менеджере контекста with методы commit и close выполняются автоматически, а если будет ошибка, то метод rollback тоже выполнится автоматически или нужно его отдельно прописывать в исключении?
насколько я понял try мы используем как раз для того что была возможность использовать rollback
Доброе время суток! Если использовать cur.executescript(), то cur.lastrowid возвращает None, подходит только с cur.execute()?
Да, обычно используется cur.execute(), чтобы, затем, использовать id для дальнейших манипуляций.
@@selfedu_rus спасибо
Чем же вас обидела Шкода?🤣🤣🤣
Подскажите, почему при повторном использовании execute, executemany вы пишите NULL для значения первого столбца
@selfedu Не совсем понятно, что делает commit. Ведь без него новые записи все равно сохраняются в БД. До этого в примерах так и работало. Или это для гарантии из-за буферизации?
После вызова commit() откатиться назад rollback() уже не получится, мы здесь управляем состоянием БД при изменении данных. Текст видео здесь: proproprogs.ru/modules/metody-execute-executemany-executescript-commit-rollback
@selfedu На 11:50 свойство lastrowid возвращает значение скрытого поля rowid, а не car_id из таблицы, они же не связаны никак. И это поле rowid особенность SQLite или у всех СУБД есть что-то подобное?
rowid - это синоним primary key и принимает то же значение, что и car_id. Подробнее здесь www.sqlite.org/rowidtable.html. И да, это особенность SQLite, в других БД этого может и не быть, например в MySQL поля rowid нет.
Вопрос. if con: con.rollback() почему без отступа?
можно и так, но лучше с отступом
@@selfedu_rus , спасибо!
подставил свой список и получил следующую ошибку sqlite3.ProgrammingError: Incorrect number of bindings supplied.
в чем может быть причина?
вопрос снимается - указал не ту переменную