Python, введение в БД
Здравствуйте, здесь и сейчас я хочу рассказать, что такое базы данных, зачем они нужны, и т.д.; для работы с ними мы будем использовать python и его библиотеку sqlite3.
Так нам говорит Яндекс, но если сказать простыми словами, не углубляясь во все эти понятия, то:
То есть как в библиотеку мы можем прийти и взять книгу «Война и мир», зная что она будет лежать в разделе романов, на букву «В», так и из БД мы можем взять запись по определённому аргументу, в данном случае жанру.
И тут возникает вопрос.
И что бы ответить на этот вопрос, мы должны кое-что узнать.
Как хранятся данные в базах данных
Сначала нужно понять, что БД делятся на:
Сетевые и иерархические БД:
Такие БД представляют собой графы и хранят информацию в них же.
Данные БД здесь мы рассматривать не будем. Поэтому перейдём к реляционной БД.
Реляционные базы данных
Я думаю что, на вопрос мы ответили, и можно идти дальше.
Зачем нужны базы данных?
За всю жизнь, человечество накопила невероятно много информации, а БД, как мы знаем собирают, и сортирует эту информацию по таблицам (в нашем случае). И БД помогают абсолютно спокойно ориентироваться во всей этой куче информации, добавлять её туда, изменять и т.д.;
Из теории в практику
Сейчас мы пойдём в практику, но перед этим хотелось бы уточнить кое-что. Сверху я написал такую строку:
Мой косяк исправили, идём в практику!
Установка sqlite3
Да, это смешно, но мало ли кому-нибудь понадобится
Я не буду описывать алгоритм установки, ведь это давно сделали за меня, если вам нужно установить данный модуль, то просьба идти вот сюда.
Создание первой БД
cur = con.cursor — позволит нам производить операции с БД, остальное не важно.
cur.execute(. ) — создаёт таблицу с именем тест и всего 1 колонкой id, в которой все данные — числа
commit() — грубо говоря, сохранение БД
А давайте создадим программу, которая запрашивает имя и фамилию, и записывает их в БД, а потом по выбору цифр либо выводит, либо записывает снова.
Стандартные моменты пропустим.
cur.execute(«INS. ») — Добавление данных
cur.execute(«SeL. ») — Получение данных. И так как там отдаётся массив, то мы его перебираем, а после ещё и из кортежа данные берём.
«SELECT», «INSERT», «DROP» и т.д. — это всё SQL.
cur.fetchall() — это что бы в переменную записалось всё, что пришло из БД.
Вывод
Базы данных — важная и очень нужная вещь. Здесь мы затронули настолько её малую часть, что аж смешно. Поэтому чтобы действительно узнать как это работает, советую почитать об этом всём в интернете, благо информации много. Удачи!
Python: Работа с базой данных, часть 1/2: Используем DB-API
В статье рассмотрены основные методы DB-API, позволяющие полноценно работать с базой данных. Полный список можете найти по ссылкам в конец статьи.
Требуемый уровень подготовки: базовое понимание синтаксиса SQL и Python.
Готовим инвентарь для дальнейшей комфортной работы
Примечание: внося изменения в базу не забудьте их применить, так как база с непримененными изменениями остается залоченной.
Вы можете использовать (последние два варианта кросс-платформенные и бесплатные):
Python DB-API модули в зависимости от базы данных
| База данных | DB-API модуль |
|---|---|
| SQLite | sqlite3 |
| PostgreSQL | psycopg2 |
| MySQL | mysql.connector |
| ODBC | pyodbc |
Соединение с базой, получение курсора
Для начала рассмотрим самый базовый шаблон DB-API, который будем использовать во всех дальнейших примерах:
При работе с другими базами данных, используются дополнительные параметры соединения, например для PostrgeSQL:
Чтение из базы
Обратите внимание: После получения результата из курсора, второй раз без повторения самого запроса его получить нельзя — вернется пустой результат!
Запись в базу
Разбиваем запрос на несколько строк в тройных кавычках
Длинные запросы можно разбивать на несколько строк в произвольном порядке, если они заключены в тройные кавычки — одинарные (»’…»’) или двойные («»». «»»)
Конечно в таком простом примере разбивка не имеет смысла, но на сложных длинных запросах она может кардинально повышать читаемость кода.
Объединяем запросы к базе данных в один вызов метода
Данный метод также удобен, когда у нас запросы сохранены в отдельной переменной или даже в файле и нам его надо применить такой запрос к базе.
Делаем подстановку значения в запрос
Важно! Никогда, ни при каких условиях, не используйте конкатенацию строк (+) или интерполяцию параметра в строке (%) для передачи переменных в SQL запрос. Такое формирование запроса, при возможности попадания в него пользовательских данных – это ворота для SQL-инъекций!
Возможны два варианта:
Примечание 1: В PostgreSQL (UPD: и в MySQL) вместо знака ‘?’ для подстановки используется: %s
Примечание 2: Таким способом не получится заменять имена таблиц, одно из возможных решений в таком случае рассматривается тут: stackoverflow.com/questions/3247183/variable-table-name-in-sqlite/3247553#3247553
UPD: Примечание 3: Благодарю Igelko за упоминание параметра paramstyle — он определяет какой именно стиль используется для подстановки переменных в данном модуле.
Вот ссылка с полезным приемом для работы с разными стилями подстановок.
Он всегда возвращает кортеж или None. если запрос пустой.
Курсор как итератор
UPD: Повышаем устойчивость кода
Благодарю paratagas за ценное дополнение:
Для большей устойчивости программы (особенно при операциях записи) можно оборачивать инструкции обращения к БД в блоки «try-except-else» и использовать встроенный в sqlite3 «родной» объект ошибок, например, так:
UPD: Использование with в psycopg2
Благодарю KurtRotzke за ценное дополнение:
Последние версии psycopg2 позволяют делать так:
Некоторые объекты в Python имеют __enter__ и __exit__ методы, что позволяет «чисто» взаимодействовать с ними, как в примере выше.
UPD: Ипользование row_factory
Благодарю remzalp за ценное дополнение:
Использование row_factory позволяет брать метаданные из запроса и обращаться в итоге к результату, например по имени столбца.
По сути — callback для обработки данных при возврате строки. Да еще и полезнейший cursor.description, где есть всё необходимое.
Пример из документации:
Дополнительные материалы (на английском)
Руководство по SQLite в Python
SQL и Python — обязательные инструменты для любого специалиста в сфере анализа данных. Это руководство — все, что вам нужно для первоначальной настройки и освоения основ работы с SQLite в Python. Оно включает следующие пункты:
SQLite3 (часто говорят просто SQLite) — это часть стандартного пакета Python 3, поэтому ничего дополнительно устанавливать не придется.
Что будем создавать
В процессе этого руководства создадим базу данных в SQLite с помощью Python, несколько таблиц и настроим отношения:
Типы данных SQLite в Python
SQLite для Python предлагает меньше типов данных, чем есть в других реализациях SQL. С одной стороны, это накладывает ограничения, но, с другой стороны, в SQLite многое сделано проще. Вот основные типы:
К сожалению, других привычных для SQL типов данных в SQLite нет.
Первые шаги с SQLite в Python
Начнем руководство с загрузки библиотеки. Для этого нужно использовать следующую команду:
Следующий шаг — создание базы данных.
Создание базы данных SQLite в Python
Если файл уже существует, то функция connect осуществит подключение к нему.
перед строкой с путем стоит символ «r». Это дает понять Python, что речь идет о «сырой» строке, где символы «/» не отвечают за экранирование.
Функция connect создает соединение с базой данных SQLite и возвращает объект, представляющий ее.
Резидентная база данных
Еще один способ создания баз данных с помощью SQLite в Python — создание их в памяти. Это отличный вариант для тестирования, ведь такие базы существуют только в оперативной памяти.
Однако в большинстве случаев (и в этом руководстве) будет использоваться описанный до этого способ.
Создание объекта cursor
Теперь выполнять запросы можно следующим образом:
Обратите внимание на то, что сами запросы должны быть помещены в кавычки — это важно. Это могут быть одинарные, двойные или тройные кавычки. Последние используются в случае особенно длинных запросов, которые часто пишутся на нескольких строках.
Создание таблиц в SQLite в Python
Пришло время создать первую таблицу в базе данных. С объектами соединения ( conn ) и cursor ( cur ) это можно сделать. Будем следовать этой схеме.
В коде выше выполняются следующие операции:
Для создания второй таблицы просто повторим последовательность действий, используя следующие команды:
После исполнения этих двух скриптов база данных будет включать две таблицы. Теперь можно добавлять данные.
Добавление данных с SQLite в Python
В Python часто приходится иметь дело с переменными, в которых хранятся значения. Например, это может быть кортеж с информацией о пользователе.
Если его нужно загрузить в базу данных, тогда подойдет следующий формат:
В данном случае все значения заменены на знаки вопроса и добавлен параметр, содержащий значения, которые нужно добавить.
Важно заметить, что SQLite ожидает получить значения в формате кортежа. Однако в переменной может быть и список с набором кортежей. Таким образом можно добавить несколько пользователей:
Но нужно использовать функцию executemany вместо обычной execute :
SQLite и предотвращение SQL-инъекций
Скрипты для загрузки данных
Следующие скрипты можно скопировать и вставить для добавления данных в обе таблицы:
Используйте следующие запросы:
Получение данных с SQLite в Python
Следующий момент касательно SQLite в Python — выбор данных. Структура формирования запроса та же, но к ней будет добавлен еще один элемент.
Использование fetchone() в SQLite в Python
Она вернет следующее:
Использование fetchmany() в SQLite в Python
Он вернет следующее:
Использование fetchall() в SQLite в Python
Функцию fetchall() можно использовать для получения всех результатов. Вот что будет, если запустить скрипт:
Удаление данных в SQLite в Python
Теперь рассмотрим процесс удаления данных с SQLite в Python. Здесь та же структура. Предположим, нужно удалить любого пользователя с фамилией «Parker». Напишем следующее:
Если затем сделать следующей запрос:
Будет выведен пустой список, подтверждающий, что запись удалена.
Объединение таблиц в SQLite в Python
Наконец, посмотрим, как использовать объединение данных для более сложных запросов. Предположим, нужно сгенерировать запрос, включающий имя и фамилию каждого покупателя заказа.
Для этого напишем следующее:
Тот же подход работает с другими SQL-операциями.
Выводы
В этом материале вы узнали все, что требуется для работы с SQLite в Python: загрузка библиотеки, создание баз и таблиц, добавление, запрос и удаление данных.
А вы знаете о том, что в Python есть встроенная СУБД?
Если вы — программист, то я полагаю, что вы, наверняка, знаете о существовании чрезвычайно компактной и нетребовательной к ресурсам СУБД SQLite, или даже пользовались ей. Эта система обладает практически всеми возможностями, которых можно ожидать от реляционной СУБД, но при этом всё хранится в единственном файле. Вот некоторые сценарии использования SQLite, упомянутые на официальном сайте этой системы:
Импорт модуля
Создание подключения к БД
Для организации подключения к базе данных SQLite не нужно беспокоиться об установке драйверов, о подготовке строк подключения и о прочих подобных вещах. Создать базу данных и получить в своё распоряжение объект подключения к ней можно очень просто и быстро:
Выполнив эту строку кода, мы создадим базу данных и подключимся к ней. Дело тут в том, что база данных, к которой мы подключаемся, пока не существует, поэтому система автоматически создаёт новую пустую БД. Если же база данных уже создана (предположим, это my-test.db из предыдущего примера), для того чтобы к ней подключиться, достаточно воспользоваться точно таким же кодом.
Файл только что созданной базы данных
Создание таблицы
Теперь давайте создадим таблицу в нашей новой БД:
Если этот код функционирует так, как ожидается (вышеприведённая команда, правда, ничего не возвращает), в нашем распоряжении окажется таблица, готовая к дальнейшей работе с ней.
Вставка записей в таблицу
Представим, что нам нужно добавить в таблицу несколько записей одной командой. В SQLite сделать это очень просто:
Сообщений об ошибках после выполнения этого кода не поступает, а это значит, что данные успешно добавлены в таблицу.
Выполнение запросов к базе данных
Теперь пришло время узнать о том, правильно ли отработали команды, которые мы только что выполняли. Давайте выполним запрос к БД и попробуем получить из таблицы USER какие-то данные. Например — получим записи, относящиеся к пользователям, возраст которых не превышает 22 года:
Результат выполнения запроса к БД
Как видите, то, что было нужно, получить удалось. И сделать это было очень просто.
Кроме того, даже хотя SQLite — простая СУБД, она отличается крайне широкой поддержкой. Поэтому с ней можно работать, используя большинство SQL-клиентов.
Я пользуюсь DBeaver. Предлагаю взглянуть на то, как это выглядит.
Подключение к базе данных SQLite из SQL-клиента (DBeaver)
Я пользуюсь облачным сервисом Google Colab и хочу загрузить файл my-test.db на свой компьютер. Если же вы экспериментируете с SQLite на компьютере, то это значит, что вы, без необходимости скачивать откуда-то файл базы данных, можете подключиться к ней, используя SQL-клиент.
В случае с DBeaver для подключения к БД SQLite нужно создать новое подключение и выбрать, в качества типа базы данных, SQLite.
Подготовка подключения в DBeaver
Затем надо найти файл базы данных.
Подключение файла базы данных
После этого можно выполнять SQL-запросы к базе данных. Тут нет ничего особенного, отличающегося от работы с обычными реляционными БД.
Выполнение запросов к базе данных
Интеграция с pandas
Думаете, на этом мы завершим разговор о поддержке SQLite в Python? Нет, нам ещё есть о чём поговорить. А именно, так как SQLite — это стандартный Python-модуль, эта СУБД легко интегрируется с дата-фреймами pandas.
Для сохранения датафрейма в БД можно просто воспользоваться его методом to_sql() :
Вот и всё! Нам даже не нужно заранее создавать таблицу. Типы данных и характеристики полей будут настроены автоматически, на основании характеристик датафрейма. Конечно, вы, если надо, можете настроить всё самостоятельно.
Теперь, предположим, нам нужно получить объединение таблиц USER и SKILL и записать полученные данные в датафрейм pandas. Это тоже очень просто:
Чтение данных из БД в датафрейм pandas
Замечательно! А теперь давайте запишем то, что у нас получилось, в новую таблицу с именем USER_SKILL :
С этой таблицей, конечно, можно работать и пользуясь SQL-клиентом.
Применение SQL-клиента для работы с базой данных
Итоги
В Python, безусловно, есть много приятных неожиданностей, которые, если специально их не искать, можно и не заметить. Специально подобные возможности никто не прятал, но из-за того, что в Python встроено очень много всего, на некоторые из таких возможностей можно просто не обратить внимания, или, откуда-то о них узнав, просто о них забыть.
Очень важно то, что SQLite отлично стыкуется с pandas. Данные из БД очень легко считывать, помещая в датафреймы. Не менее проста и операция по сохранению содержимого датафреймов в базу данных. Это ещё сильнее упрощает использование SQLite.
Предлагаю всем, кто дочитал до этого места, заняться собственными исследованиями в поиске интересных возможностей Python!
Код, который я демонстрировал в этой статье, можно найти здесь.
Пользуетесь ли вы SQLite в своих Python-проектах?
Использование SQL с Python – полное руководство
Главное меню » Информация » Использование SQL с Python – полное руководство
Все компании используют большие или малые базы данных. База данных – это не что иное, как организованный сбор данных. Данные организованы в строки, столбцы и таблицы и индексируются, чтобы упростить поиск необходимой информации. Базы данных предлагают множество функций, с помощью которых можно легко управлять большими объемами информации через Интернет, а также вводить и выводить большие объемы данных через типичный файл, такой как текстовый файл.
СУБД или система управления базами данных – это программное обеспечение для взаимодействия пользователей и баз данных. Эти пользователи не обязательно являются людьми, но могут быть программами или приложениями. Это когда приходит SQL. SQL является языком запросов и очень популярен в базах данных. Это позволяет программе на Python взаимодействовать с базой данных для выполнения запросов.
Существует много библиотек, с помощью которых мы можем связать интерфейс нашего приложения с базой данных. Примерами таких библиотек Python SQL являются SQLite, pymssql, sqlalchemy и другие. Каждая из этих библиотек Python SQL имеет свои плюсы и минусы и содержит функции для заданий Python SQL и генератора запросов Python SQL. Мы объясним одну из таких библиотек Python SQL под названием SQLite, которая доступна в Python. В этом блоге мы увидим, как подключать, хранить и извлекать данные на сервер SQL или простой SQL с Python.
Вы также можете конвертировать CSV в SQL Python и сохранить его в таблице в вашей базе данных. SQL-сервер подключения к базе данных Python выполняется с помощью библиотек SQL-сервера Python на Python. Эти библиотеки запускают задания SQL Python, такие как хранение, извлечение, удаление и помогают Python подключаться к серверу SQL.
Раздел 1: Использование основных функций SQLite
Некоторый код для представления вышеуказанных шагов:
Python-код для демонстрации создания и вставки таблиц с помощью SQL
Раздел 2: выборка данных
Извлечение данных из базы данных так же просто, как и создание. Метод execute использует ключевое слово «Select» для извлечения данных из таблицы с указанным именем в виде списка списков.
Код Python для демонстрации SQL для извлечения данных.
Раздел 3: Обновление, удаление записей в базе данных
Вы также можете использовать ряд функций, помимо упомянутых выше. К ним относятся обновление, удаление записей, ввод данных пользователем и т. д.
Python-код для отображения обновления и удаления
# Код для отображения графического представления
Раздел 4: Использование методов для запросов к большой базе данных
Ранее количество записей в базе данных было ограниченным, но большие базы данных также можно запрашивать с помощью SQLite. Некоторые методы для этого включают fetchall(), executetescript(), executemany() и т. д.
executetescript(): этот метод выполняет несколько операторов SQL одновременно. Вам необходимо передать скрипт в параметре этого метода.
executemany(): этот метод используется всякий раз, когда executetescript() должен использоваться несколько раз.
Вот и все. Теперь вы можете легко получить доступ к вашему SQL-серверу, используя эту библиотеку Python SQL. Это поможет вам создавать приложения, которым требуется функциональность базы данных, например, система управления библиотекой или что то другое, поскольку они требуют взаимодействия пользователя с внутренней базой данных. Закатите рукава и начните использовать SQL с кодом.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

