Работа с PostgreSQL на Python

Введение PostgreSQL [https://www.postgresql.org/] - одна из наиболее продвинутых и широко используемых систем управления реляционными базами данных. Он чрезвычайно популярен по многим причинам, некоторые из которых включают его открытый исходный код, его расширяемость и его способность обрабатывать множество различных типов приложений и различные нагрузки. С помощью Python вы можете легко установить соединение с вашей базой данных PostgreSQL. Для PostgreSQL существует множество драйверов Python, наиболее популярным из которых является psycopg. Его

Вступление

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

С помощью Python вы можете легко установить соединение с вашей базой данных PostgreSQL. Для PostgreSQL существует множество драйверов Python, наиболее популярным из которых является psycopg. Его текущая версия - psycopg2.

В этой статье мы обсудим, как получить доступ к базе данных PostgreSQL в Python с помощью драйвера psycopg2.

Модуль psycopg2

Мы можем интегрировать Postgres с Python с помощью модуля psycopg2. psycopg2 - это адаптер базы данных Postgres для Python. Чтобы использовать этот модуль, вы должны сначала его установить. Это можно сделать с помощью команды pip , как показано ниже:

 $ pip3 install psycopg2 

Обратите внимание, что я использую Python 3.5, поэтому я использовал pip3 вместо pip .

После установки модуля вы можете использовать его для подключения к базе данных в своем приложении.

Подключение к базе данных

Чтобы подключиться к вашей базе данных, вы должны сначала создать объект подключения, представляющий базу данных. Затем вы должны создать объект курсора, который поможет вам в выполнении ваших операторов SQL.

В следующем примере показано, как установить соединение с базой данных с именем «postgres»:

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="", host="127.0.0.1", port="5432") 
 
 print("Database opened successfully") 

Выход:

 Database opened successfully 

Ниже приводится список параметров, переданных методу connect()

  • database : имя базы данных, к которой необходимо подключиться.
  • user : имя пользователя, которое будет использоваться для аутентификации.
  • password : пароль базы данных для пользователя.
  • host : адрес сервера базы данных. Например, доменное имя «localhost» или IP-адрес.
  • port : номер порта. Если вы его не предоставите, будет использоваться значение по умолчанию 5432.

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

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

Чтобы создать таблицу Postgres в Python, мы используем SQL-оператор CREATE TABLE Этот запрос следует выполнить после установления соединения с базой данных. Мы также создаем объект курсора, вызывая метод cursor() , принадлежащий объекту connection Этот cursor используется для фактического выполнения ваших команд.

Затем мы вызываем метод execute() cursor чтобы помочь нам в создании таблицы. Наконец, нам нужно зафиксировать и закрыть соединение. «Фиксация» соединения указывает драйверу отправить команды в базу данных.

Следующий пример демонстрирует это:

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432") 
 print("Database opened successfully") 
 
 cur = con.cursor() 
 cur.execute('''CREATE TABLE STUDENT 
 (ADMISSION INT PRIMARY KEY NOT NULL, 
 NAME TEXT NOT NULL, 
 AGE INT NOT NULL, 
 COURSE CHAR(50), 
 DEPARTMENT CHAR(50));''') 
 print("Table created successfully") 
 
 con.commit() 
 con.close() 

Выход

 Database opened successfully 
 Table created successfully 

Метод commit() помогает нам применить изменения, которые мы внесли в базу данных, и эти изменения не могут быть отменены, если commit() выполняется успешно. Метод close() закроет соединение с базой данных.

На этом этапе мы создали таблицу с 4 столбцами, каждый из которых имеет различные типы данных. Приведенный выше вывод показывает, что таблица была создана успешно.

Вставка данных

Мы можем вставить одну или несколько записей в таблицу базы данных Postgres. Опять же, мы должны сначала установить соединение с сервером базы данных, вызвав функцию connect() Затем мы должны создать объект курсора, вызвав метод cursor() . Наконец, мы должны запустить INSERT через метод execute() чтобы добавить данные в таблицу.

Вот пример этого в действии:

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432") 
 print("Database opened successfully") 
 
 cur = con.cursor() 
 
 cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3420, 'John', 18, 'Computer Science', 'ICT')"); 
 
 con.commit() 
 print("Record inserted successfully") 
 con.close() 

Выход

 Database opened successfully 
 Record inserted successfully 

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

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432") 
 print("Database opened successfully") 
 
 cur = con.cursor() 
 
 cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3419, 'Abel', 17, 'Computer Science', 'ICT')"); 
 cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3421, 'Joel', 17, 'Computer Science', 'ICT')"); 
 cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3422, 'Antony', 19, 'Electrical Engineering', 'Engineering')"); 
 cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3423, 'Alice', 18, 'Information Technology', 'ICT')"); 
 
 con.commit() 
 print("Records inserted successfully") 
 con.close() 

Выход

 Database opened successfully 
 Records inserted successfully 

Поскольку метод commit() не вызывается до тех пор, пока мы не «выполним» все INSERT , несколько записей вставляются одним вызовом метода commit() .

Извлечение данных

Вы можете выбрать данные из базы данных Postgres и просмотреть записи таблицы. Во-первых, вы должны установить соединение с базой данных с помощью функции connect() . Затем следует создать новый курсор, вызвав метод cursor() . Созданный объект курсора затем можно использовать для выполнения SELECT для запроса данных из базы данных.

Например:

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432") 
 print("Database opened successfully") 
 
 cur = con.cursor() 
 cur.execute("SELECT admission, name, age, course, department from STUDENT") 
 rows = cur.fetchall() 
 
 for row in rows: 
 print("ADMISSION =", row[0]) 
 print("NAME =", row[1]) 
 print("AGE =", row[2]) 
 print("COURSE =", row[3]) 
 print("DEPARTMENT =", row[4], "\n") 
 
 print("Operation done successfully") 
 con.close() 

Выход

 Database opened successfully 
 ADMISSION = 3420 
 NAME = John 
 AGE = 18 
 COURSE = Computer Science 
 DEPARTMENT = ICT 
 
 ADMISSION = 3419 
 NAME = Abel 
 AGE = 17 
 COURSE = Computer Science 
 DEPARTMENT = ICT 
 
 ADMISSION = 3421 
 NAME = Joel 
 AGE = 17 
 COURSE = Computer Science 
 DEPARTMENT = ICT 
 
 ADMISSION = 3422 
 NAME = Antony 
 AGE = 19 
 COURSE = Electrical Engineering 
 DEPARTMENT = Engineering 
 
 ADMISSION = 3423 
 NAME = Alice 
 AGE = 18 
 COURSE = Information Technology 
 DEPARTMENT = ICT 
 
 Operation done successfully 

Здесь мы получили данные из базы данных, указав таблицу и имена столбцов, которые нам нужно получить из таблицы базы данных. Эти данные возвращаются нам в виде списка кортежей, причем список «верхнего уровня» представляет собой строки данных. Тогда каждая строка представляет собой кортеж данных столбца. Если для запроса не возвращено ни одной строки, то fetchall() возвращает пустой список.

Обновление таблиц

Мы можем обновить или изменить детали записи, которая уже была вставлена в таблицу базы данных. Во-первых, мы должны установить соединение с базой данных с помощью метода connect() Затем мы вызываем cursor() для создания объекта курсора. Наконец, мы запускаем метод execute() для выполнения UPDATE с входными значениями.

Например:

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432") 
 print("Database opened successfully") 
 
 cur = con.cursor() 
 
 cur.execute("UPDATE STUDENT set AGE = 20 where ADMISSION = 3420") 
 con.commit() 
 print("Total updated rows:", cur.rowcount) 
 
 cur.execute("SELECT admission, age, name, course, department from STUDENT") 
 rows = cur.fetchall() 
 for row in rows: 
 print("ADMISSION =", row[0]) 
 print("NAME =", row[1]) 
 print("AGE =", row[2]) 
 print("COURSE =", row[2]) 
 print("DEPARTMENT =", row[3], "\n") 
 
 print("Operation done successfully") 
 con.close() 

Выход

 Database opened successfully 
 Total updated rows: 1 
 ADMISSION = 3419 
 NAME = 17 
 AGE = Abel 
 COURSE = Abel 
 DEPARTMENT = Computer Science 
 
 ADMISSION = 3421 
 NAME = 17 
 AGE = Joel 
 COURSE = Joel 
 DEPARTMENT = Computer Science 
 
 ADMISSION = 3422 
 NAME = 19 
 AGE = Antony 
 COURSE = Antony 
 DEPARTMENT = Electrical Engineering 
 
 ADMISSION = 3423 
 NAME = 18 
 AGE = Alice 
 COURSE = Alice 
 DEPARTMENT = Information Technology 
 
 ADMISSION = 3420 
 NAME = 20 
 AGE = John 
 COURSE = John 
 DEPARTMENT = Computer Science 
 
 Operation done successfully 

В приведенных выше eample мы обновили значение столбца AGE для всех строк , где ADMISSION является 3420. После выполнения обновления мы затем восстановить эти данные , чтобы убедиться в том , что соответствующие строки / столбцы были обновлены.

Удаление строк

Чтобы удалить запись из таблицы базы данных Postgres, мы должны сначала установить соединение с сервером базы данных. Во-вторых, объект курсора должен быть создан путем вызова функции cursor() . Затем мы запускаем DELETE чтобы выполнить удаление.

Например:

 import psycopg2 
 
 con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432") 
 print("Database opened successfully") 
 
 cur = con.cursor() 
 
 cur.execute("DELETE from STUDENT where ADMISSION=3420;") 
 con.commit() 
 print("Total deleted rows:", cur.rowcount) 
 
 cur.execute("SELECT admission, name, age, course, department from STUDENT") 
 rows = cur.fetchall() 
 for row in rows: 
 print("ADMISSION =", row[0]) 
 print("NAME =", row[1]) 
 print("AGE =", row[2]) 
 print("COURSE =", row[3]) 
 print("DEPARTMENT =", row[4], "\n") 
 
 print("Deletion successful") 
 con.close() 

Выход

 Database opened successfully 
 Total deleted rows: 1 
 ADMISSION = 3419 
 NAME = Abel 
 AGE = 17 
 COURSE = Computer Science 
 DEPARTMENT = ICT 
 
 ADMISSION = 3421 
 NAME = Joel 
 AGE = 17 
 COURSE = Computer Science 
 DEPARTMENT = ICT 
 
 ADMISSION = 3422 
 NAME = Antony 
 AGE = 19 
 COURSE = Electrical Engineering 
 DEPARTMENT = Engineering 
 
 ADMISSION = 3423 
 NAME = Alice 
 AGE = 18 
 COURSE = Information Technology 
 DEPARTMENT = ICT 
 
 Deletion successful 

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

Заключение

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

comments powered by Disqus

Содержание