Python psycopg2 check connection

Подключение Python 3 к БД PostgreSQL

Небольшой скрипт на Python 3, который проверит доступность подключения к серверу баз данных PostgreSQL на веб-сервере.

В первую очередь необходимо проверить наличие коннектора Python к СУБД PostgreSQL psycopg2.

Затем на сервере БД создадим пользователя db_user и базу данных test_db

Для этого войдёт в консоль psql от пользователя postgres

и запустим такие SQL-команды:

CREATE USER db_user WITH PASSWORD 'yourPassword'; CREATE DATABASE test_db OWNER db_user; \q

Затем в каталоге веб-сервера, где хранятся скрипты Python, создадим файл dbconnection.py (и не забываем про chmod 755 . ) со следующим содержимым:

#!/usr/bin/python3 print('Content-Type: text/html; charset=utf-8 \r\n') print('

Подключение к БД PostgreSQL

') import psycopg2 as pgsql from psycopg2 import OperationalError try: connection = pgsql.connect(database='test_db', user='db_user', password='yourPassword', host='localhost', port='5432') print('

Подключение к базе данных выполнено успешно

') connection.close() except OperationalError as error: print(f'

Ошибка подключения к БД: ')

Проверяем. Запускаем браузер, вводим адрес веб-сервера и путь к скриптам и дописываем после слеша dbconnection.py:

http://IP_или_имя_хоста/scripts/dbconnection.py

В браузере мы должны будем увидеть такую строчку:

Подключение к БД прошло успешно.

Похожие посты:

Источник

Убедиться, что соединение с базой данных psycopg2 живо

У меня есть приложение python, которое открывает соединение с базой данных, которое может входить в сеть в течение нескольких часов, но иногда сервер базы данных перезагружается, а в то время как у python все еще есть соединение, оно не будет работать с исключением OperationalError . Итак, я ищу любой надежный метод для «ping» базы данных и знаю, что соединение живое. Я проверил документацию psycopg2, но не могу найти ничего подобного. Конечно, я могу выпустить простой простой оператор SQL, например SELECT 1 , и поймать исключение, но я надеюсь, что есть собственный метод, например PHP pg_connection_status Спасибо.

3 ответа

pg_connection_status реализуется с использованием PQstatus. psycopg не предоставляет этот API, поэтому проверка недоступна. Единственное место, где psycopg вызывает сам PQstatus, — это когда создается новое соединение и в начале выполнения. Итак, да, вам нужно будет выпустить простой оператор SQL, чтобы узнать, все ли там соединение.

Этот вопрос действительно старый, но по-прежнему появляется в поиске Google, поэтому я считаю, что важно знать, что экземпляр psycopg2.connection теперь имеет атрибут closed . который будет 0 , когда соединение открыто, и больше нуля, когда соединение будет закрыто. Следующий пример должен продемонстрировать:

import psycopg2 import subprocess connection = psycopg2.connect( database=database, user=username, password=password, host=host, port=port ) print connection.closed # 0 # restart the db externally subprocess.check_call("sudo /etc/init.d/postgresql restart", shell=True) # this query will fail because the db is no longer connected try: cur = connection.cursor() cur.execute('SELECT 1') except psycopg2.OperationalError: pass print connection.closed # 2 

Вы пытались убить соединения с базой данных TCP дескриптор (в Windows). connection.closed сожалению, connection.closed не изменит значение.

@Vyktor Ты прав! Проблема в том, что соединение Python не знает, что оно разорвано, пока не попытается связаться с БД. Я обновил пример. Хорошая новость заключается в том, что вы можете обернуть код выполнения запроса, чтобы проверить соединение на наличие ошибок и при необходимости восстановить соединение.

Мое соединение закрыто во время запроса , так как база данных перезапущена, cur.execute(‘SELECT 1’) бросила InterfaceError в моем случае с сообщением cursor already closed

connection.closed не отражает соединение, закрытое/отключенное сервером. Он указывает только на соединение, закрытое клиентом, используя connection.close()

Чтобы убедиться, что соединение все еще действует, прочитайте свойство connection.isolation_level . Это вызовет оператор OperationalError с pgcode == «57P01», если соединение будет мертвым.

Это добавляет немного задержки для обратного перехода к базе данных, но должно быть предпочтительнее SELECT 1 или аналогичного.

import psycopg2 dsn = "dbname=postgres" conn = psycopg2.connect(dsn) # . some time elapses, e.g. connection within a connection pool try: connection.isolation_level except OperationalError as oe: conn = psycopg2.connect(dsn) c = conn.cursor() c.execute("SELECT 1") 

Ещё вопросы

  • 1 Как получить текущий элемент в Dropdownlist для ASP.NET
  • 0 как сообщить, что область видимости обновлена в angularjs?
  • 0 Правильный SQL-запрос — Обновление записей, где заголовок совпадает
  • 1 Как использовать модуль Python Mobilenium с селеном
  • 0 Процесс сценария Page.Client после события нажатия кнопки
  • 1 Мангуст найти один внутри цикла
  • 1 Тип вывод странность
  • 1 Простой Android запрос https?
  • 1 Как работать с FXML (передавать или получать значения из интерфейса) без использования класса контроллера в JavaFX?
  • 0 PHP неправильно передает переменную
  • 1 динамически загрузить OCX и получить дескриптор загруженного модуля в C #
  • 0 Сортировка результатов SQL для удобства чтения?
  • 1 распространение синтаксиса с картой не работает
  • 1 Можно ли проанализировать с JSONObject и RealmObject с той же моделью?
  • 0 MySQL: добавление X минут к столбцу времени
  • 1 Сортировать список по имени, дате и иерархии
  • 0 Совместное использование таблицы БД Mysql между разными учетными записями пользователей
  • 1 Python: как исправить ключевые значения JSON без двойных кавычек?
  • 0 Что означает typedef cell (* proc_type) (const std :: vector &); делать?
  • 0 Qt отсутствует библиотека?
  • 0 Добавить, где предложения к SQL выбрать динамически
  • 1 SLF4J: Не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder», API
  • 1 Кодирование каждый раз производит разные хэши
  • 0 Можно ли использовать постоянное значение адреса памяти для другого времени? [Дубликат]
  • 1 Позвоните класс для рецептов Minecraft
  • 1 построить динамический массив для charts.js
  • 1 Чистая Java-альтернатива GIMP с * live * плагином?
  • 1 Монитор Обновить токен для веб-толчок FCM и заменить его на старый в БД
  • 0 Codeigniter и MongoDb избегают открытия нескольких соединений
  • 0 Как преобразовать предложение WHERE IN с несколькими значениями в RegExp или Like
  • 0 Javascript / JQuery сравнить входное значение с массивом
  • 1 Ошибка: тип программы уже существует: com.fasterxml.jackson.core.Base64Variant
  • 0 C ++ VS2010 с использованием параллелизма пространства имен; Нет пространства имен с этим именем
  • 1 получить сообщение, если отправить электронную почту не удалось C # и Gmail
  • 1 Использование операторов Node.JS внутри грамматики PEG.js
  • 0 Выровняйте горизонтальные изображения и текстовые ссылки внутри ul
  • 1 Функции Pandas не показывают данные для всех столбцов
  • 0 AngularJS Valdiation не работает с директивой People Picker
  • 0 AngualrJS «X» не восстанавливает результаты после очистки текстового фильтра в IE
  • 0 Заголовок «Access-Control-Allow-Origin» отсутствует в запрошенном
  • 0 Блокировка / замораживание таблицы в ListView
  • 0 Навигация по массиву с границами столбцов
  • 0 Оператор SQL не получает определение переменной
  • 0 Как отключить класс css для определенного внутреннего тега div, когда div является фоновым полем?
  • 0 синтаксическая ошибка в моих SQL-запросах
  • 1 Условные утверждения странно действуют в моем скребке
  • 0 ajaForm возвращает неверный XML в responseXML
  • 0 Установка типа шаблонного кода при каждом выполнении
  • 0 Как независимые разработчики ПО скрывают свой объектный код, когда вы можете декомпилировать?
  • 0 как разбирать в каком то улье?

Источник

Python psycopg2 check connection

PostgreSQL is an advanced and open-source relational database that assists users in storing and managing data efficiently. Over the past few years, it has been noticed that developers prefer to use the PostgreSQL database with all the popular languages, including Java, Python, C++, etc.

You will find this write-up useful if you are a Python user looking to connect to a PostgreSQL database server using Python. So, let’s start!

How to Connect to Postgres Database Using Python?

To establish a connection with the Postgres database via python, we will utilize one of the most frequently used adapters named “psycopg2”. The psycopg2 is a Postgres database adapter/driver that is used to perform various operations on the Postgres database via python programming.

The psycopg2 module offers a connect() function that assists us in connecting with the suppliers’ databases.

Users must follow the below listed stepwise guidelines for connecting to a Postgres database through python programming:

Step 1: Open Command Prompt

Firstly, search for the CMD from the Windows search bar:

img

Clicking on the “CMD” app will open the command prompt.

Step 2: Install psycopg2

Let’s execute the below command to install the “psycopg2” module from the CMD:

img

From the above snippet, you can clearly observe that the “psycopg2” module has been installed successfully.

Step 3: Connect to Postgre Database Via Python

First, you must import the “psycopg2” at the start of your project/program. After that, utilize the connect() function of the “psycopg2” module to establish a connection with Postgres:

con = psycopg2.connect( database="example", user="postgres", password="cp12345", host="localhost", port= '5432' )

In the above snippet, we utilized the following connection parameters:

database: specify the database name to which you want to connect.
user: specify a user for authentication.
password: specify the password to connect to the respective database.
host: specify the localhost or IP address.
port: specify the port number, “5432” is the default port number.

img

The error-free output shows that the connection has been established successfully.

Step 4: Create Cursor Object

The cursor() method assists us in executing the Postgres commands from Python. To do so, firstly, create a cursor object:

img

Once the cursor object is created, you can utilize any function of the Cursor class/object.

Step 5: Execute Postgres Query

To execute any Postgres query, command, function, etc., we will utilize the execute() function of the cursor class:

cursor_obj.execute("SELECT * FROM bike_details")

In the above snippet, we utilized the execute() function. Within the execute() function, we utilized the SELECT query to fetch the data of the bike_details table:

img

The output shows that the execute() function successfully executed the SELECT query.

Step 6: Fetch All Records

To fetch all the records retrieved by the SELECT query, we will utilize the fetchall() method of the cursor class as follows:

result = cursor_obj.fetchall()

img

In the above code snippet, we fetched all the rows of the bike_details table and stored the result set into the “result” variable.

Finally, we will utilize the print() function to print the result set retrieved by the SELECT statement:

img

This is how you can connect to the Postgres database and perform various operations using Python programming.

In order to connect to the Postgres database server via python, an adapter/module named “psycopg2”, is used. To do so, firstly, install the “psycopg2” module, import it into your python program, and utilize the connect() function of the “psycopg2” module to establish a connection with Postgres. Through practical demonstration, this blog post explained how to connect to the Postgres database using Python and execute Postgres commands from Python.

Источник

Читайте также:  Access properties of javascript object
Оцените статью