PostgreSQL — мощная, бесплатная и надёжная система управления базами данных (СУБД). Её используют в серьёзных проектах, где важны производительность и сохранность данных. В отличие от SQLite, которую мы могли бы взять для простых задач, PostgreSQL — это стандарт индустрии для сложных и высоконагруженных систем.
Почему PostgreSQL?
Мы выбрали PostgreSQL не просто так. Вот почему:
- Надёжность: Ваши данные под защитой. Это критически важно для любого приложения.
- Гибкость: Можно добавлять свои функции, типы данных и даже языки программирования.
- Стандарты SQL: PostgreSQL строго следует стандартам SQL. Это упрощает переход между разными СУБД.
- Сообщество: Огромное сообщество разработчиков и пользователей всегда готово помочь и развивать проект.
- Бесплатно: Открытый исходный код означает, что нет лицензионных платежей. Вы можете изучать, как всё работает изнутри.
Важно: Чтобы работать с PostgreSQL, нужен установленный сервер.
- Windows: Скачайте установщик с официального сайта.
- Linux/macOS: Используйте менеджер пакетов. Например,
sudo apt install postgresqlдля Ubuntu илиbrew install postgresqlдля macOS.
Подключаемся к PostgreSQL из Python
Для работы с PostgreSQL из Python используем библиотеку psycopg2. Это один из самых популярных и надёжных адаптеров.
Сначала установим её:
pip install psycopg2-binary
Теперь напишем код для подключения к базе данных и выполнения запросов.
import psycopg2
# Данные для подключения к базе данных
# В реальных проектах их хранят в переменных окружения или конфигах.
# Для примера укажем напрямую.
DB_NAME = "your_database_name" # Замените на имя вашей БД
DB_USER = "your_username" # Замените на ваше имя пользователя
DB_PASSWORD = "your_password" # Замените на ваш пароль
DB_HOST = "localhost"
DB_PORT = "5432"
conn = None # Инициализируем conn и cur вне try, чтобы они были доступны в finally
cur = None
try:
# Устанавливаем соединение
conn = psycopg2.connect(
dbname=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
host=DB_HOST,
port=DB_PORT
)
# Создаем курсор. Он позволяет выполнять SQL-запросы.
cur = conn.cursor()
# Создаем таблицу users, если её нет
cur.execute("""
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
)
""")
conn.commit() # Сохраняем изменения
print("Таблица 'users' успешно создана или уже существует.")
# Вставляем данные
cur.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("Иван Иванов", "ivan@example.com"))
cur.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ("Мария Петрова", "maria@example.com"))
conn.commit()
print("Данные успешно вставлены.")
# Выбираем данные
cur.execute("SELECT id, name, email FROM users")
users = cur.fetchall() # Получаем все строки
print("\nСписок пользователей:")
for user in users:
print(f"ID: {user[0]}, Имя: {user[1]}, Email: {user[2]}")
# Обновляем данные
cur.execute("UPDATE users SET email = %s WHERE name = %s", ("ivan_new@example.com", "Иван Иванов"))
conn.commit()
print("\nEmail Ивана Иванова обновлен.")
# Удаляем данные
cur.execute("DELETE FROM users WHERE name = %s", ("Мария Петрова",))
conn.commit()
print("Мария Петрова удалена из базы данных.")
except Exception as e:
print(f"Произошла ошибка: {e}")
if conn: # Проверяем, что соединение установлено
conn.rollback() # Откатываем изменения при ошибке
finally:
# Закрываем курсор и соединение
if cur:
cur.close()
if conn:
conn.close()
print("Соединение с базой данных закрыто.")
Ваше первое задание:
- Установите PostgreSQL на свой компьютер.
- Создайте новую базу данных и пользователя (например, через утилиту
psqlили графический интерфейс pgAdmin).- Замените
your_database_name,your_username,your_passwordв коде на свои данные.- Запустите скрипт. Убедитесь, что он подключается, создаёт таблицу, вставляет, выбирает, обновляет и удаляет данные.
- Попробуйте добавить в таблицу новое поле, например,
age INT, и вставлять данные с ним.
Управление транзакциями
В коде вы видели conn.commit() и conn.rollback(). Это основа транзакций.
- Транзакция — это группа операций, которая выполняется как одно целое. Либо все операции проходят успешно (
commit), либо ни одна из них не выполняется (rollback). conn.commit(): Сохраняет все изменения в базе данных.conn.rollback(): Отменяет все изменения, возвращая базу данных к исходному состоянию.
Транзакции критически важны для сохранения целостности данных, особенно в системах, где с базой работают много пользователей одновременно.
Теперь, когда вы освоили основы работы с PostgreSQL и SQL-запросами из Python, мы готовы двигаться дальше. В следующем разделе мы погрузимся в архитектуру Django и поймём, как он упрощает взаимодействие с базами данных, используя всё, что мы узнали.