Архив метки: _

Книги по Python для опытных разработчиков

Привет, друзья! В этой статье мы собрали книги по Python для опытных питонистов и для тех, кто уже освоил основы языка и хотел бы двигаться дальше. В подборку вошли книги 2019-22 годов издания.

Expert Python Programming

Авторы: Michal Jaworski, Tarek Ziade

Год издания: 2019

Синтаксис Python довольно прост. Но написать на нем чистый, читаемый, переиспользуемый и простой в поддержке код умеют не все. Авторы этой книги поделились своими знаниями о лучших подходах, полезных инструментах и стандартах, применяемых профессиональными Python-разработчиками.

В начале книги разбираются особенности синтаксиса Python 3.7 и применение продвинутых концепций и механизмов ООП. Затем читателю предлагается исследовать различные подходы к реализации метапрограммирования. Авторы также рассматривают best practices нейминга при написании пакетов, создание исполняемых файлов и использование таких инструментов, как buildout и virtualenv для деплоя кода на удаленные серверы.

Прочитав эту книгу, вы станете настоящим экспертом в написании эффективного и поддерживаемого кода на Python.

Книга предназначена для профессиональных Python-разработчиков.

[books_ad_block]

Django for professionals

Автор: William S. Vincent

Год издания: 2020

Руководство по созданию профессиональных сайтов на Django.

Автор раскрывает такие темы, как использование Docker и PostgreSQL, создание надежного потока аутентификации, тестирование, улучшение безопасности и производительности.

Книга для опытных пользователей Django (по крайней мере, для тех, кто освоил основы).

Competitive Programming in Python

Авторы: Christoph Dürr, Jill-Jênn Vie

Год издания: 2021

Сборник 128 алгоритмических задач с разбивкой по темам (последовательности, графы, циклы в графах, деревья, множества и т.п.). Среди задач есть и классические, и менее известные.

Этот задачник пригодится для подготовки к соревнованиям по программированию и к собеседованиям.

Fluent Python

Автор: Luciano Ramalho

Год издания: 2021

Книга предназначена для опытных разработчиков, желающих улучшить свои навыки применения Python 3.

Программисты, переключающиеся на Python с других языков, могут довольно быстро достичь определенной продуктивности. Но при этом они зачастую переносят в свой код приемы, не характерные для Python, а особенностями самого Python не пользуются (т. е. их код не «питоничный»).

В этой книге автор сосредоточился на языковых средствах, которые либо уникальны для Python, либо отсутствуют во многих других языках. Прочитав ее, вы откроете для себя идиоматичные функции Python 3 и библиотеки, которые помогут вам сделать ваш код короче, быстрее и читабельнее.

Книга пригодится не только опытным программистам, которые переходят на Python. Если вы только учитесь программированию и Python — ваш первый язык, вам тоже стоит познакомиться с его специфичными функциями. В учебниках для начинающих эти моменты редко освещают. Для изучения языка с нуля эта книга не подходит, но если вы уже знаете основы, вам тоже будет интересно.

Robust Python

Автор: Patrick Viafore

Год издания: 2021

Некоторые программисты считают, что Python — не слишком эффективный язык, не подходящий для продакшен-систем и годящийся только для прототипирования. Но на самом деле проблема не в языке, а в разработчиках, которые недостаточно углубились в его изучение и не познакомились с инструментами и приемами написания надежного кода.

Эта книга расскажет, как сделать ваш код более чистым и удобным в поддержке.

При написании книги автор ориентировался на опытных питонистов. Упор в ней делается не на применении как можно большего числа фич. Она скорее о том, как писать надежный код. Также автор разбирает, как ваш выбор приемов влияет на легкость поддержки кода в дальнейшем.

Целевая аудитория книги — старшие разработчики, работающие с крупными кодовыми базами. Также книга будет интересна разработчикам-самоучкам, желающим разобраться, почему те или иные приемы считаются лучшими или худшими, и начинающим специалистам, нуждающимся в практических советах.

Python. Чистый код для продолжающих

Автор: Эл Свейгарт

Год издания: 2022

После прочтения учебника для начинающих по какому-либо языку программирования вы пытаетесь найти более обстоятельные учебные пособия. Беда в том, что вы повсюду натыкаетесь на все те же руководства по написанию «Hello, world!».

«Python. Чистый код для продолжающих» — прекрасный учебник для тех, кто уже ознакомился с основами Python и хотел бы углубить знания.

Автор разбирает не только тонкости синтаксиса языка. Вы познакомитесь с инструментами командной строки, которыми пользуются разработчики (форматтеры, линтеры, система контроля версий). Вы узнаете, что делает код читаемым и как писать чистый код. А вдобавок ко всему вы разберетесь в нотации большого «О», анализе алгоритмов и объектно-ориентированном проектировании.

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

Сообщение Книги по Python для опытных разработчиков появились сначала на Pythonist.


Source: pythonist.ru knigi feed

Новые книги по машинному обучению

Машинное обучение — одно из самых популярных и востребованных направлений для питонистов. В этой статье мы собрали для вас самые новые книги по машинному обучению для начинающих и опытных специалистов.

Deep Learning with Python

Автор: Francois Chollet

Год издания: 2021

Учебное пособие для начального знакомства с глубоким обучением, но подойдет и тем, кто хочет расширить свое понимание темы.

Автор старался избегать математических формул и объяснять основные идеи машинного обучения в отрывках кода. Эти сниппеты сопровождаются комментариями, практическими советами и простыми высокоуровневыми объяснениями всего, в чем нужно разобраться новичку.

Примеры кода в книге написаны на Python и с использованием фреймворка Keras. Они показывают наилучшие подходы к применению Keras и TensorFlow 2.

Прочитав эту книгу, вы получите четкое понимание того, что такое глубокое обучение, где оно применяется и какие есть ограничения в его применении. Вы познакомитесь со стандартным процессом решения задач машинного обучения и узнаете, как справляться с распространенными проблемами. Также вы научитесь использовать Keras для решения реальных задач, от компьютерного зрения до обработки естественного языка.

Книга написана для Python-разработчиков, желающих заняться машинным и глубоким обучением.

Practical Deep Learning

Автор: Ron Kneusel

Год издания: 2021

Введение в машинное обучение. Прочитав эту книгу, вы узнаете, как создать хороший набор данных и как оценивать производительность обученной модели. Научитесь работать с двумя ведущими наборами инструментов для машинного обучения — scikit-learn и Keras. Познакомитесь с несколькими классическими моделями машинного обучения и узнаете, как работают и обучаются нейронные сети. Наконец, вы разберетесь, как взять набор данных и с нуля разработать успешную модель.

Предполагается, что читатель не имеет бэкграунда, связанного с машинным обучением, но отличается любопытством и имеет желание экспериментировать. Математика сведена к минимуму. Цель книги — помочь вам разобраться в основных концепциях.

При этом читатель должен быть знаком с программированием в целом и знать математику на уровне старшей школы, а также основы статистики и теории вероятности.

Deep Learning: A Visual Approach

Автор: Andrew Glassner

Год издания: 2021

Тема искусственного интеллекта имеет как горячих приверженцев, собирающихся спихнуть на машины как можно больше работы, так и убежденных противников, считающих, что однажды машины нас поработят. Кто же прав? Когда ИИ стоит внедрять, а когда лучше воздержаться?

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

Эта книга поможет разобраться, что собой представляет глубокое обучение. Никаких особых познаний для понимания книги читателю не требуется.

Многие люди считают, что алгоритмы глубокого обучения сложны. На самом деле обычно они простые, а их мощь основана на миллионных итерациях по базам данных. В этой книге автор сознательно обошелся без сложной математики и даже без кода, изложив общие принципы в популярной форме.

Позже, если захотите, вы сможете применить свои знания на практике. Для этого автор предоставляет бонусные части на GitHub (там уже есть код на Python).

Machine Learning for Financial Risk Management with Python

Автор: Abdullah Karasan

Год издания: 2022

Книга о применении машинного обучения для создания высокоточных финансовых моделей. Читательская аудитория — люди, разбирающиеся как в финансах, так и в машинном обучении (т. е. книга даже близко не для начинающих питонистов).

TensorFlow 2 Pocket Reference

Автор: KC Tung

Год издания: 2021

Практическое пособие по решению конкретных задач, с которыми вы скорее всего столкнетесь в работе с TensorFlow.

Предполагается, что читатели умеют использовать Python (а также библиотеки NumPy, pandas и JSON) для работы с данными и создания моделей TensorFlow.

Practical Weak Supervision

Авторы: Wee Hyong Tok, Amit Bahree, Senja Filipi

Год издания: 2021

Во многих реальных проектах получение качественных размеченных данных часто занимает значительное количество времени. Слабое обучение (Weak Supervision) позволяет объединять идеи эвристики и краудсорсинга для создания наборов данных со слабой разметкой, которые можно использовать в качестве входных данных для задач машинного и глубокого обучения.

Книга предназначена для профессионалов, работающих над проектами машинного обучения. Предполагается, что читатели знают Python и знакомы с библиотеками и инструментами ML.

Data Science at the Command Line

Автор: Jeroen Janssens

Год издания: 2021

Многие люди (да и компании) уверены, что для решения задач Data Science нужны исключительно новые технологии. Но довольно большая часть этих задач может быть решена еще до того, как к делу подключатся R, Python или базы данных. Старые добрые технологии вроде sed и awk все еще в строю, они мощные и гибкие.

Эта книга не о том, как вообще решать задачи Data Science. Она о том, как при помощи работы в консоли делать это более эффективно.

Автор рассмотрел больше 90 инструментов командной строки, применяющихся для очистки данных, анализа, визуализации и моделирования. Но основной упор он сделал не на самих инструментах, а на использовании их в конвейерах. Прочитав эту книгу, вы узнаете, как при помощи связок инструментов находить простые решения для сложных проблем.

Книга пригодится всем, кто работает с данными. Используемый вами язык программирования и операционная система не имеют значения: к вашим услугам будет образ Docker.

Data Science Bookcamp

Автор: Leonard Apeltsin

Год издания: 2021

Карьера датасаентиста предполагает постоянное решение задач, к которым не прилагается набора готовых вариантов ответа. К сожалению, умение решать задачи приобретается только путем практики, другого способа нет.

Поэтому данная книга построена на основе разбора жизненных кейсов: от анализа онлайн-объявлений до отслеживания вспышек заболеваний на основе данных из новостей. Научившись находить подходы к решению подобных проблем, вы будете лучше подготовлены к началу карьеры в сфере data science.

Книга предназначена для новичков в науке о данных. Например, она пригодится хорошему фронтендеру, который не слишком разбирается в математике, но хотел бы попробовать себя в data science.

Предполагается, что читатель знаком с синтаксисом Python (знаний начинающего самоучки будет достаточно). Также потребуется знание математики, но не страшнее тригонометрии в старшей школе.

Machine Learning Bookcamp

Автор: Alexey Grigorev

Год издания: 2021

В этой статье мы собрали для вас самые новые книги по машинному обучению для начинающих и опытных специалистов.

Введение в машинное обучение с упором на практику. Целевая аудитория — разработчики, знающие основы Python, интересующиеся машинным обучением и желающие приобрести практический опыт работы с данными.

Эту книгу отличает практичность и жизненность примеров. Вы научитесь предсказывать цену на машины, определять, не намерены ли клиенты перестать пользоваться сервисами компании, и рассчитывать риски невозврата кредита. Также вы создадите программу для классификации одежды по категориям (футболки, платья, штаны и пр.).

Каждый проект начинается с постановки задачи, которая затем решается при помощи различных инструментов и фреймворков. При этом автор говорит исключительно о вещах, важных для решения задачи. Теория затрагивается по минимуму.

Как и в любой книге по машинному обучению, здесь есть некоторое количество формул. Все они объясняются при помощи кода.

Все разделы книги содержат упражнения для практики.

Стоит отметить, что книга будет полезна и тем читателям, которые уже работают с машинным обучением. Например, им могут быть интересны главы, посвященные деплойменту.

Надеемся, наши обзоры помогут вам подобрать подходящую книгу. Приятного чтения!

Сообщение Новые книги по машинному обучению появились сначала на Pythonist.


Source: pythonist.ru knigi feed

Новые книги по Python на русском языке

Привет, друзья! В этой статье мы собрали для вас обзоры учебных пособий по языку Python, которые вышли на русском языке в 2021-22 годах. Конечно, это не все новинки последних двух лет. Мы постарались включить в статью пособия для питонистов разных уровней и при этом не раздуть ее до размеров альманаха. Здесь будет пара книг для детей, пара для новичков, книга для продолжающих изучение языка и книга с проектами, а также пособие по глубокому обучению для опытных разработчиков.

Python. Чистый код для продолжающих

Автор: Эл Свейгарт

Год издания: 2022

После прочтения учебника для начинающих по какому-либо языку программирования вы пытаетесь найти более обстоятельные учебные пособия. Беда в том, что вы повсюду натыкаетесь на все те же руководства по написанию «Hello, world!».

Программисты называют этот период «пустыней отчаяния». Из учебников для начинающих вы уже выросли, а до действительно сложных тем еще не доросли. Именно для вас Эл Свейгарт написал эту книгу.

Эл Свейгарт — автор нескольких замечательных книг по Python. Например, он написал «Automate the Boring Stuff with Python» (2020) и «Cracking Codes with Python» (2018).

«Python. Чистый код для продолжающих» — прекрасный учебник для тех, кто уже ознакомился с основами Python и хотел бы углубить знания.

Автор разбирает не только тонкости синтаксиса языка. Вы познакомитесь с инструментами командной строки, которыми пользуются разработчики (форматтеры, линтеры, система контроля версий). Вы узнаете, что делает код читаемым и как писать чистый код. А вдобавок ко всему вы разберетесь в нотации большого «О», анализе алгоритмов и объектно-ориентированном проектировании.

[books_ad_block]

Большая книга проектов Python

Автор: Эл Свейгарт

Год издания: 2022

Начинающим программистам часто советуют читать открытый код программ, например, на GitHub. Но большие проекты бывают слишком запутаны, к тому же в них может не быть хороших комментариев и документации.

В этой книге вы найдете целых 80 маленьких программ, на которых сможете потренироваться в чтении и воспроизведении кода. Большинство приведенных программ не превышает 256 строк кода, а значит, разобраться в них будет вполне вам по силам.

По каждому проекту дается краткое описание, пример результатов работы и собственно код. В конце каждого раздела автор добавил список вопросов, над которыми вы можете подумать, исследуя код, и предложения для экспериментов с кодом.

Книга Свейгарта будет незаменимым пособием для начинающих программистов, которые уже изучили основы Python, но пока не представляют, как писать собственные программы. Также она прекрасно подойдет тем энтузиастам, которые вообще предпочитают учиться в процессе создания чего-нибудь.

Python, Django и PyCharm для начинающих

Автор: Анатолий Постолит

Год издания: 2021

Книга для начинающих программистов, желающих заняться веб-разработкой на Python. Автор рассмотрел те элементарные действия, которые постоянно выполняют веб-разработчики.

В начале книги читатели познакомятся с технологиями, использующимися при создании веб-приложений. Здесь также разбирается установка и настройка ПО для разработки (интерпретатор Python, IDE PyCharm, фреймворк Django, менеджер работы с базами данных SQLite).

Далее автор переходит к краткому обзору основ самого языка Python, а уж затем к более сложным и теснее связанным с веб-разработкой темам.

Книга содержит множество иллюстраций и примеров кода.

Программирование на Python в примерах и задачах

Автор: Алексей Васильев

Год издания: 2021

Алексей Васильев — автор популярных книг «JavaScript в примерах и задачах», «Программирование на C# для начинающих», «Программирование на C++ в примерах и задачах».

Эта книга представляет собой учебник по Python. В ней разобраны все основные темы (базовые операции, переменные, структуры данных, функции, классы, наследование, обработка исключений и т.д.). Книга хорошо отформатирована, в ней много иллюстраций и, разумеется, примеров кода.

Что касается примеров, читатели отмечают, что они в основном математические и не слишком интересные. Зато разжеваны очень подробно и понятно!

Также читателям предлагаются задачи для самостоятельной работы. Единственный минус — к ним не прилагаются варианты решения от автора (а в них можно было бы подсмотреть более эффективные приемы).

Книга прекрасно подойдет начинающим питонистам, уже знакомым с программированием в целом (например, студентам компьютерных специальностей).

Глубокое обучение с подкреплением

Авторы: Лаура Грессер, Ван Лун Кенг

Год издания: 2022

Введение в глубокое обучение с подкреплением для студентов компьютерных специальностей и профессиональных разработчиков. Предполагается, что читатель умеет программировать на Python и имеет представление о машинном и глубоком обучении. Также читателям пригодится опыт работы с PyTorch.

Авторы книги разработали две библиотеки программного обеспечения для глубокого обучения с подкреплением и выпустили ряд лекций и учебников по этой теме.

Миссия: Python. Создаем игры вместе с детьми

Автор: Шон МакМанус

Год издания: 2022

Одно из немногих учебных пособий по Python для детей. Это пошаговое руководство поможет вашему ребенку создать собственную компьютерную игру. Причем дети могут работать с книгой по-разному.

Можно скачать игру, поиграть в нее, а затем почитать, как она устроена. Или можно сначала самому создать игру, а затем поиграть в нее. Также юным читателям предлагается кастомизировать игру, используя авторский код и собственные карты, графику и загадки.

Книга написана еще в 2018 году, но на русском языке вышла только в 2022-м.

Программирование на Python. Первые шаги

Автор: Анастасия Щерба

Год издания: 2022

Учебное пособие по Python для среднего и старшего школьного возраста. В книге рассмотрен базовый синтаксис языка, а также установка и интерфейс среды IDLE. Книга неплохо отформатирована. Есть задачи для самостоятельной работы и ответы к ним.

Надеемся, наши обзоры помогут вам подобрать себе интересную книгу!

Сообщение Новые книги по Python на русском языке появились сначала на Pythonist.


Source: pythonist.ru knigi feed

PyCharm — как активировать виртуальное окружение в терминале по-умолчанию

Для этого нужно изменить терминал по-умолчанию с Power shell на CMD.

  1. File -> Settings -> Tools -> Terminal
  2. Измените значение Shell Path на C:Windowssystem32cmd.exe
  3. Включите чекбокс Activate virtualenv
  4. Нажмите apply и запустите терминал заново

Сообщение PyCharm — как активировать виртуальное окружение в терминале по-умолчанию появились сначала на Веб-студия Юсота.


Source: usota.ru python

Как настроить VPS для запуска скриптов Python

В статье рассмотрим пошаговую настройку сервера на примере VPS на Beget. Если сервера у вас ещё нет, посмотрите раздел регистрация на хостинге и аренда сервера.

Настройка сервера

Проверяем, что сервер запущен и доступы пришли на почту.

Панель управления в личном кабинете

Когда вы впервые создаете новый сервер Ubuntu 20.04 и выше, необходимо выполнить ряд важных шагов по конфигурации в рамках базовой настройки. Эти шаги помогут повысить уровень безопасности и удобства работы с сервером и послужат прочной основой для последующих действий.

Шаг 1 — Вход с привилегиями root

Чтобы войти на сервер, вам нужно знать публичный IP-адрес вашего сервера. Также вам потребуется пароль или, если вы установили ключ SSH для аутентификации, приватный ключ для учетной записи root user. Если вы еще не выполнили вход на сервер, вы можете воспользоваться инструкцией, как настроить ключи SSH в Ubuntu 22.04, которая подробно описывает этот процесс.

Если вы еще не подключились к серверу, выполните вход в систему как root user, используя следующую команду (замените выделенную часть команды на публичный IP-адрес вашего сервера):

$ ssh root@your_server_ip

Примите предупреждение об аутентичности хоста, если оно появится на экране. Если вы используете аутентификацию по паролю, укажите пароль root для входа в систему. Если вы используете ключ SSH с защитой по фразе-паролю, вам может быть предложено ввести фразу-пароль в первый раз при использовании ключа в каждом сеансе. Если вы первый раз выполняете вход на сервер с помощью пароля, вам также может быть предложено изменить пароль root.

Подробнее о root

root user — это пользователь с правами администратора в среде Linux, который имеет очень широкий набор привилегий. Из-за такого широкого набора привилегий учетной записи root не рекомендуется использовать ее на регулярной основе. Это связано с тем, что часть возможностей, получаемых с помощью учетной записи root, включает возможность внесения очень разрушительных изменений, даже если это происходит непреднамеренно.

В следующем шаге будет настраиваться новая учетная запись пользователя с ограниченными привилегиями для повседневного использования. Позже мы расскажем о том, как получить расширенные привилегии только на то время, когда они необходимы.

Шаг 2 — Создание нового пользователя

После входа в систему с правами root мы готовы добавить новую учетную запись пользователя. В будущем мы выполним вход с помощью этой новой учетной записи, а не с правами root.

Этот пример создает нового пользователя с именем sammy, но вы должны заменить это имя на имя, которое вам нравится:

# adduser sammy

Вам будет предложено ответить на несколько вопросов, начиная с пароля учетной записи.

Введите надежный пароль и введите по желанию любую дополнительную информацию. Это делать необязательно, и вы можете нажать ENTER в любом поле, которое вы хотите пропустить.

Шаг 3 — Предоставление административных прав

Теперь у нас есть новая учетная запись пользователя со стандартными правами. Однако иногда может потребоваться выполнение административных задач.

Чтобы не выполнять выход из стандартной учетной записи и выполнять вход в систему с учетной записью root, мы можем настроить так называемого суперпользователя или добавить привилегии root для стандартной учетной записи. Это позволит нашему обычному пользователю запускать команды с правами администратора, указав слово sudo перед каждой командой.

Чтобы добавить эти права для нового пользователя, нам нужно добавить пользователя в группу sudo. По умолчанию в Ubuntu 22.04 пользователи, входящие в группу sudo могут использовать команду sudo.

Используя права root, запустите эту команду, чтобы добавить нового пользователя в группу sudo (замените выделенное имя пользователя на нового пользователя):

# usermod -aG sudo sammy

Теперь, когда вы войдете в систему со стандартным пользователем, вы можете ввести sudo перед командами для выполнения действий с правами суперпользователя.

Шаг 4 — Настройка базового брандмауэра

Серверы Ubuntu 22.04 могут использовать брандмауэр UFW для проверки, что подключения разрешены только к определенным службам. Мы можем легко настроить базовый брандмауэр с помощью приложения.

Приложения могут регистрировать свои профили в UFW после установки. Эти профили позволяют UFW управлять этими приложениями по имени. OpenSSH, служба, позволяющая подключиться к нашему серверу сейчас, имеет профиль, зарегистрированный в UFW.

Чтобы увидеть это, можно ввести следующую команду:

# ufw app list
Available applications:
  OpenSSH

Нам нужно убедиться в том, что брандмауэр разрешает подключения SSH, чтобы мы могли выполнить вход в следующий раз. Чтобы разрешить эти подключения, можно ввести следующее:

# ufw allow OpenSSH

После этого мы можем активировать брандмауэр с помощью следующей команды:

# ufw enable

Введите y и нажмите ENTER, чтобы продолжить. Чтобы увидеть, что подключения SSH разрешены, введите следующее:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Поскольку брандмауэр в настоящее время блокирует все подключения, кроме SSH, если вы установите и настроите дополнительные службы, потребуется изменить настройки брандмауэра, чтобы разрешить входящий трафик.

Шаг 5 — Активация внешнего доступа для стандартного пользователя

Теперь, когда у нас есть стандартный пользователь для повседневного использования, необходимо убедиться, что мы можем ввести SSH непосредственно в учетную запись.

Примечание

Пока вы не убедитесь, что вы можете войти в систему и использовать sudo с новым пользователем, мы рекомендуем не выходить из учетной записи root. Таким образом, если у вас есть проблемы, вы можете устранить их и внести необходимые изменения в качестве root.

Процесс настройки доступа SSH для нового пользователя зависит от того, использует ли учетная запись с правами root на сервере пароль или ключи SSH для аутентификации.

Если учетная запись root использует аутентификацию по паролю

Если вы выполнили вход в учетную запись root с помощью пароля, тогда для SSH активирована аутентификация по паролю. Вы можете использовать SSH для новой учетной записи пользователя, запустив новый сеанс терминала и используя SSH с новым именем:

$ ssh sammy@your_server_ip

После ввода пароля для обычного пользователя вы сможете выполнить вход. Если вам нужно запустить команду с правами администратора, введите sudo перед командой следующим образом:

$ sudo command_to_run

Вам будет предложено использовать пароль обычного пользователя при использовании sudo в первый раз для каждого сеанса (и периодически после этого).

Если учетная запись root использует аутентификацию по ключу SSH

Если вы выполнили вход в учетную запись root с помощью ключей SSH, тогда аутентификация по паролю для SSH отключена. Вам потребуется добавить копию локального открытого ключа в файл ~/.ssh/authorized_keys нового пользователя для успешного входа.

Поскольку ваш открытый ключ уже включен в файл ~/.ssh/authorized_keys учетной записи root на сервере, мы можем скопировать структуру этого файла и директории для нашей новой учетной записи в существующем сеансе.

Самый простой способ копирования файлов с правильным правами владения и разрешениями — воспользоваться командой rsync. Она будет копировать директорию .ssh пользователя root user, сохранит разрешения и изменит владельцев файлов, все в одной команде. Обязательно измените выделенные ниже части согласно имени вашего стандартного пользователя:

Примечание

Команда rsync использует источники и пункты назначения, оканчивающиеся на завершающий слеш, иначе, чем те, которые этот завершающий слеш не имеют. При использовании rsync ниже убедитесь, что директория источника (~/.ssh) не включает завершающий слеш (убедитесь, что вы не используете ~/.ssh/​​​).

Если вы случайно добавите в команду завершающий слеш, rsync будет копировать содержимое директории ~/.ssh учетной записи root в домашнюю директорию пользователя sudo вместо копирования всей структуры директории ~/.ssh. Файлы будут находиться в неправильном месте, и SSH не сможет найти и использовать их.

# rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy

Теперь откройте новый сеанс терминала на локальном компьютере и используйте SSH с вашим новым именем пользователя:

$ ssh sammy@your_server_ip

Вы должны выполнить вход в новую учетную запись без использования пароля. Если вам нужно запустить команду с правами администратора, введите sudo перед командой следующим образом:

$ sudo command_to_run

Вам будет предложено использовать пароль обычного пользователя при использовании sudo в первый раз для каждого сеанса (и периодически после этого).

Регистрация на хостинге

Рекомендую Beget — бюджетный и с адекватной службой поддержки. Работаю с ними с 2015 года.

Переходим на страницу выбора хостинга и выбираем любой тариф с операционной системой Ubuntu. В нашем примере выберем сервер с двух-ядерным процессором.

Выбор конфигурации сервера

Если вы ещё не зарегистрированы в Beget, появится окно регистрации.

Окно регистрации на сайте Beget

Пополните баланс минимум на 22 рубля, чтобы арендовать сервер.

Панель меню в личном кабинете Beget

Если средств на балансе достаточно, автоматически откроется раздел “Облако”, где мы можем ещё раз подтвердить выбор характеристик сервера, а также задать пароль и название сервера.

Создание сервера

Жмём “Создать виртуальный сервер” и ждём письмо с доступом к серверу на почту.

Назад к настрокам сервера

Сообщение Как настроить VPS для запуска скриптов Python появились сначала на Веб-студия Юсота.


Source: usota.ru python

Python SQLite — учебное пособие на русском языке

Учебное пособие по программированию на Python для базы данных SQLite.

Оглавление

SQLite

SQLite – это встроенный движок реляционной базы данных. В документации это называется автономным, бессерверным, с нулевой конфигурацией и транзакционным ядром базы данных SQL. Он очень популярен и сегодня используется сотнями миллионов копий по всему миру. Несколько языков программирования имеют встроенную поддержку SQLite, включая Python и PHP.

Установка SQLite

sudo apt install sqlite3

Запускаем модуль sqlite3 и консоль пригласит для работы с базой данных:
sqlite>
Список команд для работы с базой данных sqlite> .help

Создание базы данных SQLite

Вся база данных SQLite хранится в обычном файле. Используем команду .open dbname.db. Если база не существует — она будет создана, если существует — будет открыта.

sqlite> .open ydb.db

Python SQLite — как подключаться к базе и отправлять запросы

Для примера получим версию базы данных SQLite.

В первом скрипте рассмотрим работу с базой данных классическим способом: откроем базу – выполним запрос – закроем базу и освободим ресурсы.

#!/usr/bin/python

import sqlite3
import sys

con = None

try:
    con = sqlite3.connect('ydb.db')

    cur = con.cursor()
    cur.execute('SELECT SQLITE_VERSION()')

    data = cur.fetchone()[0]

    print(f"SQLite version: {data}")

except sqlite3.Error as e:

    print(f"Error {e.args[0]}")
    sys.exit(1)

finally:

    if con:
        con.close()
SQLite version: 3.31.1

Рассмотрим код подробнее:

import sqlite3

Импортируем библиотеку sqlite3.

con = None

Объявляем переменную con значением None. Если мы не сможем соединиться с базой данных (например, диск переполнен), а у нас не была бы определена переменная соединения — это приведёт к ошибке в блоке finally.

con = sqlite3.connect('ydb.db')

Подключаемся к базе данных ydb.db. Метод connect возвращает объект соединения.

cur = con.cursor()
cur.execute('SELECT SQLITE_VERSION()')

Из соединения мы получаем объект курсора. Курсор используется для обхода записей из полученных результатов. Мы вызываем метод курсора execute и выполняем SQL-запрос.

data = cur.fetchone()[0]

Поскольку мы получаем только одну запись, мы вызываем метод fetchone.

print(f"SQLite version: {data}")

Полученные данные выводим в консоль.

except sqlite3.Error as e:

    print(f"Error {e.args[0]}")
    sys.exit(1)

В случае ошибки получаем исключение — выводим сообщение об ошибке и выходим из скрипта с кодом ошибки 1.

finally:

    if con:
        con.close()

con.close() закрывает работу с базой данных и освобождаем ресурсы.

Во втором примере мы снова получаем версию базы данных SQLite. На этот раз мы используем контекстный менеджер with.

#!/usr/bin/python

import sqlite3

with sqlite3.connect('ydb.db') as con:

    cur = con.cursor()
    cur.execute('SELECT SQLITE_VERSION()')

    data = cur.fetchone()[0]

    print(f"SQLite version: {data}")

Код выглядит компактнее, читается проще.

Python SQLite — метод execute

Создадим таблицу cars и вставим в нее несколько строк. Для добавления данных используем команду execute.

import sqlite3


with sqlite3.connect('ydb.db') as con:

    cur = con.cursor()

    cur.execute("DROP TABLE IF EXISTS cars;")
    cur.execute("CREATE TABLE cars(id INT, name TEXT, price INT)")
    cur.execute("INSERT INTO cars VALUES(1,'Audi',52642)")
    cur.execute("INSERT INTO cars VALUES(2,'Mercedes',57127)")
    cur.execute("INSERT INTO cars VALUES(3,'Skoda',9000)")
    cur.execute("INSERT INTO cars VALUES(4,'Volvo',29000)")
    cur.execute("INSERT INTO cars VALUES(5,'Bentley',350000)")
    cur.execute("INSERT INTO cars VALUES(6,'Citroen',21000)")
    cur.execute("INSERT INTO cars VALUES(7,'Hummer',41400)")
    cur.execute("INSERT INTO cars VALUES(8,'Volkswagen',21600)")

Рассмотрим подробнее:

cur.execute("DROP TABLE IF EXISTS cars;")

Удаляем таблицу, если она уже существует.

cur.execute("CREATE TABLE cars(id INT, name TEXT, price INT)")

Создаём новую таблицу cars с тремя столбцами: id, name, price.

cur.execute("INSERT INTO cars VALUES(1,'Audi',52642)")
cur.execute("INSERT INTO cars VALUES(2,'Mercedes',57127)")

Эти две строки вставляют в таблицу два автомобиля. Благодаря использованию контекстного менеджера with изменения фиксируются автоматически. В противном случае нам пришлось бы фиксировать их вручную.

sqlite> .mode column
sqlite> .headers on

Выведем записанные данные в консоль с помощью модуля sqlite3. Изменим способ отображения данных в консоли — используем режим столбцов и отобразим заголовки.

sqlite> select * from cars;
id          name        price
----------  ----------  ----------
1           Audi        52642
2           Mercedes    57127
3           Skoda       9000
4           Volvo       29000
5           Bentley     350000
6           Citroen     21000
7           Hummer      41400
8           Volkswagen  21600

Python SQLite — метод executemany

Создадим ту же таблицу, но уже с помощью более быстрого метода executemany. С помощью executemany можно вставлять сразу несколько записей.

Python SQLite — executemany INSERT

import sqlite3


cars = (
    (1, 'Audi', 52642),
    (2, 'Mercedes', 57127),
    (3, 'Skoda', 9000),
    (4, 'Volvo', 29000),
    (5, 'Bentley', 350000),
    (6, 'Hummer', 41400),
    (7, 'Volkswagen', 21600)
)

with sqlite3.connect('ydb.db') as con:

    cur = con.cursor()

    cur.execute("DROP TABLE IF EXISTS cars")
    cur.execute("CREATE TABLE cars(id INT, name TEXT, price INT)")
    cur.executemany("INSERT INTO cars VALUES(?, ?, ?)", cars)

Вставляем сразу восемь строк в таблицу.

cur.executemany("INSERT INTO cars VALUES(?, ?, ?)", cars)

Первый параметр — запрос SQL, второй параметр — кортеж кортежей.

Python SQLite — executemany SELECT

Метод executemany используется только для вставки данных. Иногда ошибочно пытаются получить данные по фильтру из списка значений с помощью executemany. Но для этого используется метод execute с подстановкой значений.

cur.execute('SELECT * FROM cars WHERE name in ({0})'.format(', '.join('?' for _ in names)), names)

Python SQLite — метод executescript

Рассмотрим способ создания таблицы автомобилей с помощью executescript. Будем фиксировать изменения вручную и добавим собственную обработку ошибок.

import sqlite3
import sys

con = None

try:
    con = sqlite3.connect('ydb.db')

    cur = con.cursor()

    cur.executescript("""
        DROP TABLE IF EXISTS cars;
        CREATE TABLE cars(id INT, name TEXT, price INT);
        INSERT INTO cars VALUES(1,'Audi',52642);
        INSERT INTO cars VALUES(2,'Mercedes',57127);
        INSERT INTO cars VALUES(3,'Skoda',9000);
        INSERT INTO cars VALUES(4,'Volvo',29000);
        INSERT INTO cars VALUES(5,'Bentley',350000);
        INSERT INTO cars VALUES(6,'Citroen',21000);
        INSERT INTO cars VALUES(7,'Hummer',41400);
        INSERT INTO cars VALUES(8,'Volkswagen',21600);
        """)

    con.commit()

except sqlite3.Error as e:

    if con:
        con.rollback()

    print(f"Error {e.args[0]}")
    sys.exit(1)

finally:

    if con:
        con.close()

executescript позволяет выполнять сразу несколько сриптов в одном запросе.

con.commit()

Без контекстного менеджера with изменения должны быть зафиксированы с помощью метода commit.

except sqlite.Error as e:

    if con:
        con.rollback()

    print(f"Error {e.args[0]}")
    sys.exit(1)

В случае ошибки изменения откатываются con.rollback(), а на терминал выводится сообщение об ошибке.

Python SQLite — метод lastrowid

Иногда требуется получить id последней строки таблицы в базе данных. В Python SQLite используем атрибут lastrowid объекта курсора.

import sqlite3

with sqlite3.connect(':memory:') as con:

    cur = con.cursor()
    cur.execute("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT);")
    cur.execute("INSERT INTO friends(name) VALUES ('Tom');")
    cur.execute("INSERT INTO friends(name) VALUES ('Rebecca');")
    cur.execute("INSERT INTO friends(name) VALUES ('Jim');")
    cur.execute("INSERT INTO friends(name) VALUES ('Robert');")

    last_row_id = cur.lastrowid

    print(f"The last Id of the inserted row is {last_row_id}")

:memory: — база данных, которая создаётся временно.

Python SQLite — получение данных с помощью fetchall

Метод fetchall извлекает все (или все оставшиеся) строки из набора результатов запроса и возвращает список кортежей.

import sqlite3


with sqlite3.connect('ydb.db') as con:

    cur = con.cursor()
    cur.execute("SELECT * FROM cars")

    rows = cur.fetchall()

    for row in rows:
        print(f"{row[0]} {row[1]} {row[2]}")

Python SQLite — метод fetchone

Метод fetchone возвращает следующую строку полученных результатов. Возвращает один кортеж или None, когда больше нет доступных данных.

import sqlite3

con = sqlite3.connect('ydb.db')

with con:

    cur = con.cursor()
    cur.execute("SELECT * FROM cars")

    while True:

        row = cur.fetchone()

        if row == None:
            break

        print(f"{row[0]} {row[1]} {row[2]}")

Python SQLite — row_factory

По умолчанию курсор возвращает данные в виде кортежа кортежей. Когда мы используем row_factory, данные передаются в виде словарей Python. Таким образом, мы можем ссылаться на данные по именам столбцов.

import sqlite3

con = sqlite3.connect('ydb.db')

with con:

    con.row_factory = sqlite3.Row

    cur = con.cursor()
    cur.execute("SELECT * FROM cars")

    rows = cur.fetchall()

    for row in rows:
        print(f"{row['id']} {row['name']} {row['price']}")

Python SQLite — как проверить, существует ли база данных

Невозможно проверить, существует ли файл базы данных с помощью метода connect. Метод просто подключается к базе данных, если файл существует. Если файл не существует, файл базы данных создается. Существование файла базы данных можно проверить с помощью стандартной функции os.path.exist.

import os
import sqlite3


if not os.path.exists('ydb.db'):

    con = sqlite3.connect('ydb.db')

    with con:

        cur = con.cursor()
        cur.execute("DROP TABLE IF EXISTS cars")
        cur.execute("CREATE TABLE cars(id INT, name TEXT, price INT)")
        cur.execute("INSERT INTO cars VALUES(1,'Audi', 52642)")
        cur.execute("INSERT INTO cars VALUES(2,'Mercedes', 57127)")
        cur.execute("INSERT INTO cars VALUES(3,'Skoda',9000)")
        cur.execute("INSERT INTO cars VALUES(4,'Volvo',29000)")
        cur.execute("INSERT INTO cars VALUES(5,'Bentley', 350000)")
        cur.execute("INSERT INTO cars VALUES(6,'Citroen',21000)")
        cur.execute("INSERT INTO cars VALUES(7,'Hummer',41400)")
        cur.execute("INSERT INTO cars VALUES(8,'Volkswagen', 21600)")

else:

    with sqlite3.connect('ydb.db') as con:

        cur = con.cursor()
        cur.execute("SELECT * FROM cars")
        rows = cur.fetchmany(2)

        print(rows)

В этом скрипте мы проверяем, существует ли файл ydb.db. Если файл не существует, он создается и генерируется новая таблица. Если база данных уже существует, мы извлекаем две строки из таблицы.

if not os.path.exists('test.db'):

  con = sqlite3.connect('test.db')
  ...

Python SQLite — подстановка значений в SQL-запрос

Когда мы подставляем значения в запросы, мы используем заполнители вместо того, чтобы напрямую записывать значения. Такие запросы называются параметризованными. Параметризованные запросы повышают безопасность и производительность.

Модуль Python sqlite3 поддерживает два типа заполнителей: вопросительные знаки и именованные параметры.

Подстановка значений с помощью вопросительных знаков

import sqlite3

uId = 1
uPrice = 62300

con = sqlite3.connect('ydb.db')

with con:

    cur = con.cursor()
    cur.execute("UPDATE cars SET price=? WHERE id=?", (uPrice, uId))

    print(f"Number of rows updated: {cur.rowcount}")

Метод rowcount возвращает количество обновленных строк.

Подстановка значений с помощью именованных параметров

import sqlite3

uId = 4

con = sqlite3.connect('ydb.db')

with con:

    cur = con.cursor()
    cur.execute("SELECT name, price FROM cars WHERE Id=:Id", {"Id": uId})

    row = cur.fetchone()
    print(f"{row[0]}, {row[1]}")

Python SQLite — хранение изображений в базе данных

Вставка изображений

Рассмотрим хранение изображений в базе данных SQLite. Конечно, сохранять изображения в базе данных нецелесообразно.  Общая практика состоит в том, чтобы хранить изображения в каталогах файловой системы и хранить ссылки на изображения в базе данных. Но мы рассмотрим этот приём для общего понимания возможностей SQLite.

sqlite> CREATE TABLE images(id INTEGER PRIMARY KEY, data BLOB);

Для этого примера создаем новую таблицу под названием images. Для изображений используем тип данных BLOB (англ. Binary Large Object — двоичный большой объект) — массив двоичных данных.

import sqlite3
import sys

def readImage():

    fin = None

    try:
        fin = open("sid.jpg", "rb")
        img = fin.read()
        return img

    except IOError as e:

        print(e)
        sys.exit(1)

    finally:

        if fin:
            fin.close()

con = None

try:
    con = sqlite3.connect('ydb.db')

    cur = con.cursor()

    data = readImage()
    binary = sqlite3.Binary(data)
    cur.execute("INSERT INTO images(data) VALUES (?)", (binary,) )

    con.commit()

except sqlite3.Error as e:

    if con:
        con.rollback()

    print(e)
    sys.exit(1)

finally:

    if con:
        con.close()

Рассмотрим скрипт подробнее:

Открываем и считываем изображения из каталога в базе данных.

try:
    fin = open("sid.jpg", "rb")
    img = fin.read()
    return img

Мы считываем двоичные данные из файловой системы. У нас есть изображение в формате JPG, называемое sid.jpg.

binary = sqlite3.Binary(data)

Данные кодируются с использованием двоичного объекта SQLite.

cur.execute("INSERT INTO images(data) VALUES (?)", (binary,) )

Получение изображений

Выполним обратную операцию: получим изображение из таблицы базы данных.

import sqlite3
import sys


def writeImage(data):

    fout = None

    try:
        fout = open('sid2.jpg','wb')
        fout.write(data)

    except IOError as e:

        print(e)
        sys.exit(1)

    finally:

        if fout:
            fout.close()

con = None

try:
    con = sqlite3.connect('ydb.db')

    cur = con.cursor()
    cur.execute("SELECT data FROM images LIMIT 1")
    data = cur.fetchone()[0]

    writeImage(data)


except sqlite3.Error as e:

    print(e)
    sys.exit(1)

finally:

    if con:
        con.close()

Python SQLite — метаданные таблиц

Метаданные – это информация о данных в базе данных. Метаданные в SQLite содержат информацию о таблицах и столбцах, в которых мы храним данные.

Метаданные в SQLite можно получить с помощью команды PRAGMA. Объекты SQLite могут иметь атрибуты, которые являются метаданными. Наконец, мы также можем получить конкретные метатеги, запросив таблицу sqlite_master системы SQLite.

import sqlite3

con = sqlite3.connect('ydb.db')

with con:

    cur = con.cursor()

    cur.execute('PRAGMA table_info(cars)')

    data = cur.fetchall()

    for d in data:
        print(f"{d[0]} {d[1]} {d[2]}")

В этом примере мы выполняем команду PRAGMA table_info(имя_таблицы), чтобы получить некоторую информацию о метаданных нашей таблицы cars.

ur.execute('PRAGMA table_info(cars)')

Команда PRAGMA table_info(имя_таблицы) возвращает по одной строке для каждого столбца в таблице cars. Столбцы в результирующем наборе включают порядковый номер столбца, имя столбца, тип данных, может ли столбец быть нулевым или нет, и значение по умолчанию для столбца.

for d in data:
    print(f"{d[0]} {d[1]} {d[2]}")

В следующем примере выведем все строки из таблицы cars с именами их столбцов.

import sqlite3

con = sqlite3.connect('ydb.db')

with con:

    cur = con.cursor()
    cur.execute('SELECT * FROM cars')

    col_names = [cn[0] for cn in cur.description]

    rows = cur.fetchall()

    print(f"{col_names[0]:3} {col_names[1]:10} {col_names[2]:7}")

    for row in rows:
        print(f"{row[0]:<3} {row[1]:<10} {row[2]:7}")

Мы выводим содержимое таблицы cars на консоль. Теперь мы также включаем названия столбцов. Записи выровнены по именам столбцов.

col_names = [cn[0] for cn in cur.description]

Получаем имена столбцов из свойства description объекта cursor.

print(f"{col_names[0]:3} {col_names[1]:10} {col_names[2]:7}")

В этой строке выводятся названия трех столбцов таблицы cars.

for row in rows:
    print(f"{row[0]:<3} {row[1]:<10} {row[2]:7}")

Печатаем строки с помощью цикла for. Данные выровнены по именам столбцов.

id  name       price
1   Audi         62300
2   Mercedes     57127
3   Skoda         9000
4   Volvo        29000
5   Bentley     350000
6   Hummer       41400
7   Volkswagen   21600

В последнем примере перечислим все таблицы в базе данных ydb.db.

import sqlite3

con = sqlite3.connect('ydb.db')

with con:

    cur = con.cursor()
    cur.execute("SELECT name FROM sqlite_master WHERE type='table'")

    rows = cur.fetchall()

    for row in rows:
        print(row[0])

Пример кода выводит на терминал все доступные таблицы в текущей базе данных.

cur.execute("SELECT name FROM sqlite_master WHERE type='table'")

Имена таблиц хранятся внутри системной таблицы sqlite_master.

cars
images

Python SQLite — экспорт данных

Создадим резервную копию таблиц нашей базы данных.

import sqlite3

cars = (
    (1, 'Audi', 52643),
    (2, 'Mercedes', 57642),
    (3, 'Skoda', 9000),
    (4, 'Volvo', 29000),
    (5, 'Bentley', 350000),
    (6, 'Hummer', 41400),
    (7, 'Volkswagen', 21600)
)

def writeData(data):

    f = open('cars.sql', 'w')

    with f:
        f.write(data)


con = sqlite3.connect(':memory:')

with con:

    cur = con.cursor()

    cur.execute("DROP TABLE IF EXISTS cars")
    cur.execute("CREATE TABLE cars(id INT, name TEXT, price INT)")
    cur.executemany("INSERT INTO cars VALUES(?, ?, ?)", cars)
    cur.execute("DELETE FROM cars WHERE price < 30000")

    data = 'n'.join(con.iterdump())

    writeData(data)

В этом примере воссоздаем таблицу cars в временной базе данных. Удаляем некоторые строки из таблицы и сохраняем текущее состояние таблицы в файл cars.sql. Этот файл будет служить резервной копией текущей таблицы.

def writeData(data):

    f = open('cars.sql', 'w')

    with f:
        f.write(data)

Данные из таблицы записываются в файл.

con = sqlite3.connect(':memory:')

Создаем таблицу во временной базе данных.

cur.execute("DROP TABLE IF EXISTS cars")
cur.execute("CREATE TABLE cars(id INT, name TEXT, price INT)")
cur.executemany("INSERT INTO cars VALUES(?, ?, ?)", cars)
cur.execute("DELETE FROM cars WHERE price < 30000")

Создаём таблицу cars, вставляем значения и удаляем строки, где цена меньше 30000.

data = 'n'.join(con.iterdump())

con.iterdump возвращает итератор для дампа базы данных в текстовом формате SQL. Встроенная функция join принимает итератор и объединяет все строки в итераторе, разделенные новой строкой. Эти данные записываются в файл cars.sql с помощью функции writeData.

Python SQLite — импорт данных

Выполним обратную операцию. Импортируем ранее сохранённую таблицу.

import sqlite3


def readData():

    f = open('cars.sql', 'r')

    with f:

        data = f.read()

        return data


con = sqlite3.connect(':memory:')

with con:

    cur = con.cursor()

    sql = readData()
    cur.executescript(sql)

    cur.execute("SELECT * FROM cars")

    rows = cur.fetchall()

    for row in rows:
        print(row)

Python SQLite — транзакции

Транзакция – это процесс выполнения операций с базой данных. В одной транзакции может быть несколько операций. Операции в транзакции могут быть либо выполнены целиком и полностью все, либо не выполнены вообще.

Транзакции начинаются с инструкции BEGIN TRANSACTION и завершаются инструкциями COMMIT или ROLLBACK.

SQLite поддерживает три уровня транзакций: DEFERREDIMMEDIATE and EXCLUSIVE.

  1. DEFERRED – данный режим блокировки является режимом по умолчанию в SQLite. В режиме DEFERRED SQLite начинает блокировать таблицы только после того, как будет начато выполнение какой-либо команды, при этом другие транзакции могут читать данные из таблицы, но не могут их изменять.
  2. IMMEDIATE – в данном режим происходит блокировка базы данных, как только будет выполнена команда BEGIN. При это режим IMMEDIATE в SQLIte допускает, что другие транзакции могут читать данные из базы данных, но не записывать.
  3. EXCLUSIVE – самый высокий уровень блокировки базы данных в SQLite. Режим EXCLUSIVE блокирует базу данных при выполнении команды BEGIN и при этом другие транзакции не могут ни читать данные из базы данных, ни уж тем более изменять данные.

Модуль Python SQLite также поддерживает режим автоматической фиксации, при котором все изменения в таблицах вступают в силу немедленно.

import sqlite3
import sys

con = None

try:
    con = sqlite3.connect('ydb.db')
    
    cur = con.cursor()
    cur.execute("DROP TABLE IF EXISTS friends")
    cur.execute("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT)")
    cur.execute("INSERT INTO friends(name) VALUES ('Tom')")
    cur.execute("INSERT INTO friends(name) VALUES ('Rebecca')")
    cur.execute("INSERT INTO friends(name) VALUES ('Jim')")
    cur.execute("INSERT INTO friends(name) VALUES ('Robert')")

    #con.commit()

except sqlite3.Error as e:

    if con:
        con.rollback()

    print(e)
    sys.exit(1)

finally:

    if con:
        con.close()

Мы создаем таблицу friends и пытаемся заполнить ее данными. Однако, как мы увидим, данные не фиксируются.

#con.commit()

Метод фиксации con.commit() закомментирован. Если мы раскомментируем строку, данные будут записаны в таблицу.

Python SQLite autocommit

В режиме автоматической фиксации инструкция SQL выполняется немедленно.

import sqlite3
import sys

con = None

try:
    con = sqlite3.connect('ydb.db', isolation_level = None)
    
    cur = con.cursor()

    cur.execute("DROP TABLE IF EXISTS friends")
    cur.execute("CREATE TABLE friends(id INTEGER PRIMARY KEY, name TEXT)")
    cur.execute("INSERT INTO friends(name) VALUES ('Tom')")
    cur.execute("INSERT INTO friends(name) VALUES ('Rebecca')")
    cur.execute("INSERT INTO friends(name) VALUES ('Jim')")
    cur.execute("INSERT INTO friends(name) VALUES ('Robert')")

except sqlite3.Error as e:

    print(e)
    sys.exit(1)

finally:

    if con:
        con.close()

В этом примере мы подключаемся к базе данных в режиме автоматической фиксации.

con = sqlite3.connect('ydb.db', isolation_level = None)

Смотрите также: Руководство по стилю SQL

Сообщение Python SQLite — учебное пособие на русском языке появились сначала на Веб-студия Юсота.


Source: usota.ru python