Работа с базой данных PostgreSQL на Python psycopg2


В этой статье мы рассмотрим вариант создания класса с методами для подключения и работой с базой данных PostgreSQL. Данный класс поможет нам упростить процесс подключения к базе данных и ускорит процесс написания запросов.
В этой статье мы рассмотрим вариант создания класса с методами для подключения и работой с базой данных PostgreSQL. Данный класс поможет нам упростить процесс подключения к базе данных и ускорит процесс написания запросов.
Описание методов
Наш файл содержит два класса. Давайте кратко рассмотрим содержимое класса dbPostgres, который содержит интересующие нас методы.
- __init__: Открытие соединения;
- create_table: Создание таблицы;
- insert: Внесение данных построчно;
- select: Вывод данных в виде ассоциативного массива;
- update: Обновление данных;
- delete: Удаление данных;
- truncate: Очистка таблицы;
- disconnect: Закрытие соединения;
В файле также есть второй класс main, который представлен в виде тестовых запросов для каждого метода.
Установка
Перед тем как начать работу, убедитесь, что у вас установлен модуль psycopg2.
pip install psycopg2
Подключение к базе данных
Для подключения к бд требуется установленная база данных и креды доступа.
# Параметры подключения
host = "localhost"
port = "5432"
dbname = "test_prod"
user = "postgres"
password = "postgres"
- host: IP сервера на котором установлена база данных;
- port: Порт, по которому можно подключиться к базе данных. По умолчанию 5432;
- dbname: Название базы данных;
- user: Пользователь в PostgreSQL;
- password: Пароль от пользователя PostgreSQL;
Если база данных установлена на удаленном сервере, убедитесь, что доступ открыт для внешних подключений.
Код
# -*- coding: utf-8 -*-
import psycopg2
from psycopg2.extras import RealDictCursor
import os
class dbPostgres():
# Подключение
def __init__(self, host, port, dbname, user, password):
try:
self.connection = psycopg2.connect(host = host, port = port, dbname = dbname, user = user, password = password)
self.cursor = self.connection.cursor(cursor_factory=RealDictCursor)
except Exception as e:
exit(str(e))
# Создание таблицы
def create_table(self, nameTable, structure):
try:
sql = 'CREATE TABLE IF NOT EXISTS '+nameTable+' ('+structure+')'
self.cursor.execute(sql)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Внесение строки
def insert(self, variable, nameTable, rows = None, values = None):
sql = 'INSERT INTO '+nameTable
sql += ' ('+rows+')' if rows != None else ''
sql += ' VALUES ('+values+')'
sql += ' RETURNING id;'
variable = {} if variable == None else variable
try:
self.cursor.execute(sql, variable)
self.connection.commit()
result = self.cursor.fetchall()[0]
except Exception as e:
result = False
return result
# Вывод данных
def select(self, variable, what, nameTable, where = None, order = None):
try:
sql = 'SELECT '+what+' FROM '+nameTable
sql += ' WHERE '+where if where != None else ''
sql += ' ORDER BY '+order if order != None else ''
variable = [] if variable == None else variable
self.cursor.execute(sql, variable)
result = self.cursor.fetchall()
except Exception as e:
result = False
return result
# Обновление строки
def update(self, variable, nameTable, params, where = None):
try:
sql = 'UPDATE '+nameTable+' SET '+params
sql += ' WHERE '+where if where != None else ''
variable = {} if variable == None else variable
self.cursor.execute(sql, variable)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Удаление строки
def delete(self, variable, nameTable, where):
try:
sql = 'DELETE FROM '+nameTable+' WHERE '+where
variable = {} if variable == None else variable
self.cursor.execute(sql, variable)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Очистка таблицы
def truncate(self, nameTable):
try:
sql = 'TRUNCATE TABLE '+nameTable+' RESTART IDENTITY;'
self.cursor.execute(sql)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Закрыть соединение
def disconnect(self):
try:
if self.cursor:
self.cursor.close()
if self.connection:
self.connection.close()
result = True
except Exception as e:
result = False
return result
# Пример запросов
class main():
def __init__(self):
# Параметры подключения
host = "localhost"
port = "5432"
dbname = "test_prod"
user = "postgres"
password = "postgres"
# Подключение
self.db = dbPostgres(host, port, dbname, user, password)
# CREATE TABLE
self.db.create_table("table_test", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT, department VARCHAR(50), salary DECIMAL(10, 2)")
print("Таблица успешно создана")
# INSERT
variable = {"name": "Ivan Ivanov", "age": 30, "department": "Engineering", "salary": 55000.00}
answer = self.db.insert(variable, "table_test", "name, age, department, salary", "%(name)s, %(age)s, %(department)s, %(salary)s")
print(f"Данные успешно вставлены, id вставленной строки: {answer['id']}")
# SELECT
variable = {"name": "Ivan Ivanov"}
answer = self.db.select(variable, '*', "table_test", "name = %(name)s")
print(f"Запись успешно найдена: {answer[0]['name']}")
# UPDATE
variable = {"name": "Ivan Ivanov", "age": 40}
answer = self.db.update(variable, "table_test", "age = %(age)s", "name = %(name)s")
print("Запись успешно обновлена")
# DELETE
variable = {"name": "Ivan Ivanov"}
answer = self.db.delete(variable, "table_test", "name = %(name)s")
print("Запись успешно удалена")
# TRUNCATE
answer = self.db.truncate("table_test")
print("Таблица успешно очищена")
# Закрыть соединение
self.db.disconnect()
if __name__ == "__main__":
main()
Заключение
Этот класс демонстрирует, как можно упростить и ускорить время написания запросов в базу данных PostgreSQL на Python используя библиотеку psycopg2.
- 15.01.2025
- 42
- 0
Работа с базой данных PostgreSQL на Python psycopg2
В этой статье мы рассмотрим вариант создания класса с методами для подключения и работой с базой данных PostgreSQL. Данный класс поможет нам упростить процесс подключения к базе данных и ускорит процесс написания запросов.
Описание методов
Наш файл содержит два класса. Давайте кратко рассмотрим содержимое класса dbPostgres, который содержит интересующие нас методы.
- __init__: Открытие соединения;
- create_table: Создание таблицы;
- insert: Внесение данных построчно;
- select: Вывод данных в виде ассоциативного массива;
- update: Обновление данных;
- delete: Удаление данных;
- truncate: Очистка таблицы;
- disconnect: Закрытие соединения;
В файле также есть второй класс main, который представлен в виде тестовых запросов для каждого метода.
Установка
Перед тем как начать работу, убедитесь, что у вас установлен модуль psycopg2.
pip install psycopg2
Подключение к базе данных
Для подключения к бд требуется установленная база данных и креды доступа.
# Параметры подключения
host = "localhost"
port = "5432"
dbname = "test_prod"
user = "postgres"
password = "postgres"
- host: IP сервера на котором установлена база данных;
- port: Порт, по которому можно подключиться к базе данных. По умолчанию 5432;
- dbname: Название базы данных;
- user: Пользователь в PostgreSQL;
- password: Пароль от пользователя PostgreSQL;
Если база данных установлена на удаленном сервере, убедитесь, что доступ открыт для внешних подключений.
Код
# -*- coding: utf-8 -*-
import psycopg2
from psycopg2.extras import RealDictCursor
import os
class dbPostgres():
# Подключение
def __init__(self, host, port, dbname, user, password):
try:
self.connection = psycopg2.connect(host = host, port = port, dbname = dbname, user = user, password = password)
self.cursor = self.connection.cursor(cursor_factory=RealDictCursor)
except Exception as e:
exit(str(e))
# Создание таблицы
def create_table(self, nameTable, structure):
try:
sql = 'CREATE TABLE IF NOT EXISTS '+nameTable+' ('+structure+')'
self.cursor.execute(sql)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Внесение строки
def insert(self, variable, nameTable, rows = None, values = None):
sql = 'INSERT INTO '+nameTable
sql += ' ('+rows+')' if rows != None else ''
sql += ' VALUES ('+values+')'
sql += ' RETURNING id;'
variable = {} if variable == None else variable
try:
self.cursor.execute(sql, variable)
self.connection.commit()
result = self.cursor.fetchall()[0]
except Exception as e:
result = False
return result
# Вывод данных
def select(self, variable, what, nameTable, where = None, order = None):
try:
sql = 'SELECT '+what+' FROM '+nameTable
sql += ' WHERE '+where if where != None else ''
sql += ' ORDER BY '+order if order != None else ''
variable = [] if variable == None else variable
self.cursor.execute(sql, variable)
result = self.cursor.fetchall()
except Exception as e:
result = False
return result
# Обновление строки
def update(self, variable, nameTable, params, where = None):
try:
sql = 'UPDATE '+nameTable+' SET '+params
sql += ' WHERE '+where if where != None else ''
variable = {} if variable == None else variable
self.cursor.execute(sql, variable)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Удаление строки
def delete(self, variable, nameTable, where):
try:
sql = 'DELETE FROM '+nameTable+' WHERE '+where
variable = {} if variable == None else variable
self.cursor.execute(sql, variable)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Очистка таблицы
def truncate(self, nameTable):
try:
sql = 'TRUNCATE TABLE '+nameTable+' RESTART IDENTITY;'
self.cursor.execute(sql)
self.connection.commit()
result = True
except Exception as e:
result = False
return result
# Закрыть соединение
def disconnect(self):
try:
if self.cursor:
self.cursor.close()
if self.connection:
self.connection.close()
result = True
except Exception as e:
result = False
return result
# Пример запросов
class main():
def __init__(self):
# Параметры подключения
host = "localhost"
port = "5432"
dbname = "test_prod"
user = "postgres"
password = "postgres"
# Подключение
self.db = dbPostgres(host, port, dbname, user, password)
# CREATE TABLE
self.db.create_table("table_test", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT, department VARCHAR(50), salary DECIMAL(10, 2)")
print("Таблица успешно создана")
# INSERT
variable = {"name": "Ivan Ivanov", "age": 30, "department": "Engineering", "salary": 55000.00}
answer = self.db.insert(variable, "table_test", "name, age, department, salary", "%(name)s, %(age)s, %(department)s, %(salary)s")
print(f"Данные успешно вставлены, id вставленной строки: {answer['id']}")
# SELECT
variable = {"name": "Ivan Ivanov"}
answer = self.db.select(variable, '*', "table_test", "name = %(name)s")
print(f"Запись успешно найдена: {answer[0]['name']}")
# UPDATE
variable = {"name": "Ivan Ivanov", "age": 40}
answer = self.db.update(variable, "table_test", "age = %(age)s", "name = %(name)s")
print("Запись успешно обновлена")
# DELETE
variable = {"name": "Ivan Ivanov"}
answer = self.db.delete(variable, "table_test", "name = %(name)s")
print("Запись успешно удалена")
# TRUNCATE
answer = self.db.truncate("table_test")
print("Таблица успешно очищена")
# Закрыть соединение
self.db.disconnect()
if __name__ == "__main__":
main()
Заключение
Этот класс демонстрирует, как можно упростить и ускорить время написания запросов в базу данных PostgreSQL на Python используя библиотеку psycopg2.