Подключаюсь к PostgreSQL с помощью питона. Не получается вводить данные
Начал изучать работу с базами данных. Подключаюсь к 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, вывожу всю таблицу, но ничего нового не появляется.
Ответы (2 шт):
Вы не подтверждаете (коммитете) изменение данных, поэтому в таблице изменений не происходит.
Необходимо использовать 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')
Попробуйте придерживаться вот такой конструкции.
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>
Тогда Вам не придется держать Ваш пароль в проекте, и при создании подключения его вообще можно не указывать