Все приложения взаимодействуют с данными, чаще всего через



бет3/5
Дата21.01.2022
өлшемі105,52 Kb.
#112943
түріРуководство
1   2   3   4   5
Байланысты:
Как подружить Python и базы данных SQL (1)
d18dd0bbd0b5d0bcd0b5d0bdd182d182d0b5d180d196d0bd-d399d180-d182d2afd180d0bbd196-d0b5d181d0b5d0bfd182d0b5d180-d188d0b5d188-d183d0b4d0b5, d18dd0bbd0b5d0bcd0b5d0bdd182d182d0b5d180d196d0bd-d399d180-d182d2afd180d0bbd196-d0b5d181d0b5d0bfd182d0b5d180-d188d0b5d188-d183d0b4d0b5
ПримечаниеДля выполнения разделов о MySQL и PostgreSQL необходимо самостоятельно запустить соответствующие серверы. Для быстрого ознакомления с тем, как запустить сервер MySQL, ознакомьтесь с разделом MySQL в публикации Запуск проекта Django (англ.). Чтобы узнать, как создать базу данных в PostgreSQL, перейдите к разделу Setting Up a Database в публикации Предотвращение атак SQL-инъекций с помощью Python (англ.).

SQLite


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

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



import sqlite3

from sqlite3 import Error
def create_connection(path):

connection = None

try:

connection = sqlite3.connect(path)

print("Connection to SQLite DB successful")

except Error as e:

print(f"The error '{e}' occurred")
return connection

Вот как работает этот код:



  • Строки 1 и 2 – импорт sqlite3 и класса Error.

  • Строка 4 определяет функцию create_connection(), которая принимает путь к базе данных SQLite.

  • Строка 7 использует метод connect() и принимает в качестве параметра путь к базе данных SQLite. Если база данных в указанном месте существует, будет установлено соединение. В противном случае по указанному пути будет создана новая база данных и так же установлено соединение.

  • В строке 8 выводится состояние успешного подключения к базе данных.

  • Строка 9 перехватывает любое исключение, которое может быть получено, если методу .connect() не удастся установить соединение.

  • В строке 10 отображается сообщение об ошибке в консоли.

sqlite3.connect(path) возвращает объект connection. Этот объект может использоваться для выполнения запросов к базе данных SQLite. Следующий скрипт формирует соединение с базой данных SQLite:

connection = create_connection("E:\\sm_app.sqlite")

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

MySQL

В отличие от SQLite, в Python по умолчанию нет модуля, который можно использовать для подключения к базе данных MySQL. Для этого вам нужно установить драйвер Python для MySQL. Одним из таких драйверов является mysql-connector-python. Вы можете скачать этот модуль Python SQL с помощью pip:



pip install mysql-connector-python

Обратите внимание, что MySQL – это серверная система управления базами данных. Один сервер MySQL может хранить несколько баз данных. В отличие от SQLite, где соединение равносильно порождению БД, формирование базы данных MySQL состоит из двух этапов:



  1. Установка соединения с сервером MySQL.

  2. Выполнение запроса для создания БД.

Определим функцию, которая будет подключаться к серверу MySQL и возвращать объект подключения:

import mysql.connector

from mysql.connector import Error
def create_connection(host_name, user_name, user_password):

connection = None

try:

connection = mysql.connector.connect(

host=host_name,

user=user_name,

passwd=user_password

)

print("Connection to MySQL DB successful")

except Error as e:

print(f"The error '{e}' occurred")
return connection
connection = create_connection("localhost", "root", "")

В приведенном выше коде мы определили новую функцию create_connection(), которая принимает три параметра:



  1. host_name

  2. user_name

  3. user_password

Модуль mysql.connector определяет метод connect(), используемый в седьмой строке для подключения к серверу MySQL. Как только соединение установлено, объект connection возвращается вызывающей функции. В последней строке функция create_connection() вызывается с именем хоста, именем пользователя и паролем.

Пока мы только установили соединение. Самой базы ещё нет. Для этого мы определим другую функцию – create_database(), которая принимает два параметра:



  1. Объект connection;

  2. query – строковый запрос о создании базу данных.

Вот как выглядит эта функция:

def create_database(connection, query):

cursor = connection.cursor()

try:

cursor.execute(query)

print("Database created successfully")

except Error as e:

print(f"The error '{e}' occurred")

Для выполнения запросов используется объект cursor.

Создадим базу данных sm_appдля нашего приложения на сервере MySQL:

create_database_query = "CREATE DATABASE sm_app"

create_database(connection, create_database_query)

Теперь у нас есть база данных на сервере. Однако объект connection, возвращаемый функцией create_connection() подключен к серверу MySQL. А нам необходимо подключиться к базе данных sm_app. Для этого нужно изменить create_connection() следующим образом:



def create_connection(host_name, user_name, user_password, db_name):

connection = None

try:

connection = mysql.connector.connect(

host=host_name,

user=user_name,

passwd=user_password,

database=db_name

)

print("Connection to MySQL DB successful")

except Error as e:

print(f"The error '{e}' occurred")
return connection

Функция create_connection() теперь принимает дополнительный параметр с именем db_name. Этот параметр указывает имя БД, к которой мы хотим подключиться. Имя теперь можно передать при вызове функции:



connection = create_connection("localhost", "root", "", "sm_app")

Скрипт успешно вызывает create_connection() и подключается к базе данных sm_app.

PostgreSQL

Как и в случае MySQL, для PostgreSQL в стандартной библиотеке Python нет модуля для взаимодействия с базой данных. Но и для этой задачи есть решение – модуль psycopg2:



pip install psycopg2

Определим функцию create_connection() для подключения к базе данных PostgreSQL:



from psycopg2 import OperationalError
def create_connection(db_name, db_user, db_password, db_host, db_port):

connection = None

try:

connection = psycopg2.connect(

database=db_name,

user=db_user,

password=db_password,

host=db_host,

port=db_port,

)

print("Connection to PostgreSQL DB successful")

except OperationalError as e:

print(f"The error '{e}' occurred")

return connection

Подключение осуществляется через интерфейс psycopg2.connect(). Далее используем написанную нами функцию:



connection = create_connection(

"postgres", "postgres", "abc123", "127.0.0.1", "5432"

)

Теперь внутри дефолтной БД postgres нужно создать базу данных sm_app. Ниже определена соответствующая функция create_database():



def create_database(connection, query):

connection.autocommit = True

cursor = connection.cursor()

try:

cursor.execute(query)

print("Query executed successfully")

except OperationalError as e:

print(f"The error '{e}' occurred")
create_database_query = "CREATE DATABASE sm_app"

create_database(connection, create_database_query)

Запустив вышеприведенный скрипт, мы увидим базу данных sm_app на своем сервере PostgreSQL. Подключимся к ней:



connection = create_connection(

"sm_app", "postgres", "abc123", "127.0.0.1", "5432"

)

Здесь 127.0.0.1 и 5432 это соответственно IP-адресу и порт хоста сервера.

3. Создание таблиц

В предыдущем разделе мы увидели, как подключаться к серверам баз данных SQLite, MySQL и PostgreSQL, используя разные библиотеки Python. Мы создали базу данных sm_app на всех трех серверах БД. В данном разделе мы рассмотрим, как формировать таблицы внутри этих трех баз данных.

Как обсуждалось ранее, нам нужно получить и связать четыре таблицы:


  1. users

  2. posts

  3. comments

  4. likes

SQLite

Для выполнения запросов в SQLite используется метод cursor.execute(). В этом разделе мы определим функцию execute_query(), которая использует этот метод. Функция будет принимать объект connection и строку запроса. Далее строка запроса будет передаваться методу execute( ). В этом разделе он будет использоваться для формирования таблиц, а в следующих – мы применим его для выполнения запросов на обновление и удаление.





Достарыңызбен бөлісу:
1   2   3   4   5




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет