Интеграция с базой данных.

Привет, добро пожаловать во вторую часть этой серии об API с Python и Flask.

В первой части мы рассмотрели, как создать простой Store API. Мы могли создавать, удалять, редактировать и перечислять товары в нашем магазине. Пожалуйста, пройдите, если у вас нет:



В этой части мы рассмотрим создание API с интеграцией базы данных.

База данных

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

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

Существуют разные типы баз данных, основанные на нескольких параметрах. На основе структуры у нас есть:

В этой статье мы будем использовать базу данных SQL. В Python есть встроенный модуль SQL под названием sqlite3.

Давайте вспомним код из прошлой статьи.

Вместо текущей модели магазина:

store = { “item”:
           [ 
            { “name”: ‘Book’,
              “price”: 99.99 
            }
           ] 
        }

Мы будем использовать модель базы данных.

В конце этой статьи наша структура папок должна иметь следующий вид:

flask_tutorial
|____app.py
|____data.db
|____db.py
|____venv

Прежде всего, мы создаем файл db.py.

connection = sqlite3.connect(‘data.db’) создает соединение с нашей базой данных sqlite3.

create_table = “CREATE TABLE IF NOT EXISTS items (name text PRIMARY KEY, price real)” - это SQL-запрос, который помогает нам создать базу данных для элементов.

cursor.execute(create_table) выполняет этот SQL-запрос за нас.

Пока connection.commit() сохраняет эту операцию для этого сеанса и connnection.close() завершает, закройте соединение для этого сеанса.

Наша база готова!

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

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

Строка 5 запрашивает в базе данных элементы, имя которых является переменной (name=?). Строка 6 - это выполнение нашего запроса, но с небольшой разницей здесь name=? подразумевает, что name ожидает, что переменная заменит ?. Таким образом, у нас есть name как переменная, которую мы могли бы подобрать для замены ?.

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

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

Если элемент не найден, мы возвращаем сообщение и код состояния; 404, что означает НЕ НАЙДЕН.

Следующий путь к работе - это список всех элементов в базе данных.

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

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

Следующим маршрутом будет удаление элемента из базы данных.

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

Все конечные точки настроены, и теперь в наш API интегрирована база данных.

Обратите внимание, что перед запуском файла app.py нам нужно будет запустить db.py (только один раз). Это создаст data.db файл, который является файлом для нашей базы данных sqlite3.

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

Ссылку на код в этой статье можно найти здесь

Спасибо за прочтение.