Пул соединений Python PostgreSQL с использованием Psycopg2

Примеры конкатенации строк Python Программирование и разработка

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

Требуемые модули:

Устанавливая Postgresql, выполните следующую команду в терминале Ubuntu:

sudo apt-get install postgresql postgresql-contrib

Установка psycopg2 в терминал:

pip install psycopg2

Если это не работает, попробуйте следующее:

pip install psycopg2-binary

Что такое пул соединений?

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

Классы объединения соединений Psycopg2:

Модуль Psycopg2 имеет следующие классы:

  • AbstractConnectionPool:класс AbstractConnectionPool предоставляет базовый интерфейс для управления пулом соединений с базой данных PostgreSQL, и вы можете на его основе создать собственный класс пула соединений с желаемой функциональностью.
  • SimpleConnectionPool: класс SimpleConnectionPool в psycopg2 — это реализация пула соединений, которая позволяет вам повторно использовать соединения с базой данных в ваших приложениях Python, что может повысить производительность за счет уменьшения накладных расходов на установление нового соединения для каждой операции с базой данных.
  • ThreadedConnectionPool: этот класс используется в многопоточной среде, как следует из названия. Другими словами, пул соединений, построенный с помощью этого класса, может совместно использоваться несколькими потоками.

База данных и таблица:

После успешной установки мы начинаем использовать PostgreSQL с пользователем в терминале.

sudo su postgres
[sudo] password for username:**enter your password here**

После этого введите команду «psql» для входа в интерфейс, здесь наше имя пользователя «postgres». Теперь создайте базу данных. Команда \l показывает список всех баз данных.

psql
postgres=# CREATE DATABASE test;
postgres=# \l

Создание базы данных с помощью PostgreSQL

Создание базы данных с помощью PostgreSQL

Здесь мы создали базу данных с именем » test«. После запускаем тестирование базы данных на сервере с localhost в качестве адреса хоста, 5432 в качестве номера порта и «postgres» в качестве имени пользователя. Это делается с помощью команды, как показано ниже:

psql -h localhost -p 5432 -U postgres test

Запуск сервера для базы данных

Запуск сервера для базы данных

Предположим, в базе данных мы создаем таблицу person и вставляем следующие данные:

Person
First_Name Last_Name Sex
Pankaj Chowdhury M
Rachna Agarwal F
Raj Shamanic M

оздание таблицы и вставка значен

Создание таблицы и вставка значений

Таблицы можно легко увидеть с помощью PostgreSQL, как показано ниже:

цы можно легко увидеть с помощью PostgreS

Вывод таблицы

Пошаговое объяснение

Шаг 1: Эта строка импортирует модуль psycopg2.pool, который предоставляет класс SimpleConnectionPool для создания пула соединений в Python. Создание пула соединений. В этом разделе создается пул соединений с использованием класса SimpleConnectionPool. Он устанавливает минимальное и максимальное количество соединений, которые должны поддерживаться в пуле, равные 2 и 3 соответственно. Он также предоставляет необходимые сведения о подключении к базе данных, такие как имя пользователя, пароль, хост, порт и имя базы данных.

Python3

import psycopg2.pool
 
# Create a connection pool with a minimum of 2 connections and
#a maximum of 3 connections
pool = psycopg2.pool.SimpleConnectionPool(
    2, 3, user='postgres', password='test123',
    host='localhost', port='5432', database='test')

Шаг 2: Этот раздел получает соединение из пула с помощью метода pool.getconn(). Он присваивает возвращенный объект подключения к connection1. Это соединение можно использовать для взаимодействия с базой данных. Выполнение запроса с первым подключением: этот раздел создает курсор с помощью метода cursor() для подключения 1 и использует его для выполнения запроса к базе данных. Результаты извлекаются с помощью метода fetchall() и выводятся на консоль.

Python3

connection1 = pool.getconn()
 
# Use the connection to execute a query
cursor = connection1.cursor()
print("Results from Connection1: \n")
cursor.execute('SELECT * FROM person ORDER BY id')
results = cursor.fetchall()
for data in results:
    print(data)
    print()

Шаг 3: Этот раздел следует тому же шаблону, что и предыдущий раздел, но на этот раз он получает еще два подключения из пула с помощью пула. get conn() и присваивает их connection2 и connection3 соответственно. Затем он использует каждое соединение для выполнения запроса к базе данных и выводит результаты на консоль.

Python3

connection2 = pool.getconn()
 
# Use the connection to execute a query
cursor = connection2.cursor()
print("Results from Connection2: \n")
cursor.execute('SELECT * FROM person ORDER BY id')
results = cursor.fetchall()
for data in results:
    print(data)
    print()
 
connection3 = pool.getconn()
 
# Use the connection to execute a query
cursor = connection3.cursor()
print("Results from Connection3: \n")
cursor.execute('SELECT * FROM person ORDER BY id')
results = cursor.fetchall()
for data in results:
    print(data)
    print()

Шаг 4: После использования соединений важно вернуть их обратно в пул с помощью метода pool.putconn(). Этот раздел освобождает connection1, connection2 и connection3 обратно в пул, делая их доступными для повторного использования другими частями приложения.

Python3

pool.putconn(connection1)
pool.putconn(connection2)
pool.putconn(connection3)

Python3

import psycopg2.pool
 
# Create a connection pool with a minimum of 2 connections and
#a maximum of 3 connections
pool = psycopg2.pool.SimpleConnectionPool(
    2, 3, user='postgres', password='test123',
    host='localhost', port='5432', database='test')
 
# Get a connection from the pool
connection1 = pool.getconn()
 
# Use the connection to execute a query
cursor = connection1.cursor()
print("Results from Connection1: \n")
cursor.execute('SELECT * FROM person ORDER BY id')
results = cursor.fetchall()
for data in results:
    print(data)
    print()
 
connection2 = pool.getconn()
 
# Use the connection to execute a query
cursor = connection2.cursor()
print("Results from Connection2: \n")
cursor.execute('SELECT * FROM person ORDER BY id')
results = cursor.fetchall()
for data in results:
    print(data)
    print()
 
connection3 = pool.getconn()
 
# Use the connection to execute a query
cursor = connection3.cursor()
print("Results from Connection3: \n")
cursor.execute('SELECT * FROM person ORDER BY id')
results = cursor.fetchall()
for data in results:
    print(data)
    print()
 
# Since maximum number of connections in the pool #
#is 3 and three connections 
#are already made and not released yet. 
#So, requesting for a fourth connection gives error.
 
# connection4 = pool.getconn()
# cursor = connection4.cursor()
# print("Results from Connection3: \n")
# cursor.execute('SELECT * FROM person ORDER BY id')
# results = cursor.fetchall()
# for data in results:
#     print(data)
#     print()
 
 
# Release the connection back to the pool
pool.putconn(connection1)
pool.putconn(connection2)
pool.putconn(connection3)

Выход:

езультат пула соедине

Результат пула соединений

Что делать, если количество подключений превышает максимальный лимит пула? :

Обратите внимание, что три соединения еще не освобождены, а максимальное количество соединений равно 3. Поэтому, если из пула запрашивается другое соединение (sat Connection4), возникает исключение.

oolError, когда количество подключений превышает максимальное огран

PoolError, когда количество подключений превышает максимальное ограничение пула

Читайте также:  Pandas Reindex
Оцените статью
bestprogrammer.ru
Добавить комментарий