Подключаюсь к PostgreSQL с помощью питона. Не получается вводить данные

Рейтинг: 0Ответов: 2Опубликовано: 21.05.2023

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

import psycopg2
from auth_data import host, password, db_name, user

connection = psycopg2.connect(host=host, user=user, password=password, database=db_name)

try:
    cursor = connection.cursor()

    with connection.cursor() as cursor:
        cursor.execute(f"INSERT INTO game_users (id_tg, game) VALUES (5916961672, 'Control Ultimate Edition');")
        print(f'[INFO] Successfully inserted to PostgreSQL')
except Exception as _ex:
    print(f'[INFO] Error while working with PostgreSQL {_ex}')
finally:
    if connection:
        cursor.close()
        connection.close()
        print(f'[INFO] PostgreSQL connection closed')

После иду в pgadmin, вывожу всю таблицу, но ничего нового не появляется.

Ответы

▲ 1Принят

Вы не подтверждаете (коммитете) изменение данных, поэтому в таблице изменений не происходит.

Необходимо использовать connection.commit()

Попробуйте так:

import psycopg2
from auth_data import host, password, db_name, user

connection = psycopg2.connect(host=host, user=user, password=password, database=db_name)

try:
    cursor = connection.cursor()

    with connection.cursor() as cursor:
        cursor.execute("INSERT INTO game_users (id_tg, game) VALUES (5916961672, 'Control Ultimate Edition');")
        connection.commit()
        print('[INFO] Successfully inserted to PostgreSQL')
except Exception as _ex:
    print(f'[INFO] Error while working with PostgreSQL {_ex}')
finally:
    if connection:
        cursor.close()
        connection.close()
        print('[INFO] PostgreSQL connection closed')
▲ 1

Попробуйте придерживаться вот такой конструкции.

import psycopg2
from auth_data import host, password, db_name, user

data = (5916961672, 'Control Ultimate Edition')

with psycopg2.connect(host=host, user=user, password=password, database=db_name) as connection:
    with connection.cursor() as cursor:
        try:
            cursor.execute(
                """
                INSERT INTO game_users (id_tg, game)
                    VALUES (%s, %s);
                """,
                data
            )
            print('[INFO] Successfully inserted to PostgreSQL')
        except Exception as _ex:
            print(f'[INFO] Error while working with PostgreSQL {_ex}')
            connection.rollback()
        else:
            connection.commit()
        finally:
            print(f'[INFO] PostgreSQL connection closed')

И еще, хорошей практикой является хранение параметров подключения для PostgreSQL в Windows %USERPROFILE%\AppData\Roaming\postgresql\pgpass.conf, в Linux $HOME/.pgpass с правами 0600 В следущем формате

<address>:<port>:<dbname>:<user>:<password>

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