Работа с базами данных в Python: создание и настройка
Основные способы создания базы данных в Python
Как создать файловую базу данных SQLite с помощью встроенного модуля sqlite3?
SQLite является одним из самых простых вариантов для хранения данных, не требующих установки отдельного сервера. В Python модуль sqlite3 уже встроен, поэтому достаточно импортировать его и создать подключение к файлу базы данных.
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
)
''')
conn.commit()
conn.close()создание базы данных на python (создание базы данных с помощью python)
Пояснение: метод connect создаёт или открывает файл базы данных. Объект cursor используется для выполнения SQL-запросов. В примере создаётся таблица users с автоинкрементным первичным ключом и уникальным полем email. После завершения транзакция фиксируется через commit.
Типичные ошибки: если файл базы данных заблокирован другим процессом, возникнет исключение sqlite3.OperationalError: database is locked. Решение: использовать соединение с таймаутом или избегать одновременной записи. Также возможна ошибка при попытке создать таблицу с уже существующим именем без проверки IF NOT EXISTS.
Как создать базу данных MySQL через библиотеку pymysql?
Для работы с MySQL необходимо сначала установить сервер MySQL, затем библиотеку pymysql (команда pip install pymysql).
import pymysql
connection = pymysql.connect(
host='localhost',
user='root',
password='your_password',
charset='utf8mb4'
)
try:
with connection.cursor() as cursor:
cursor.execute("CREATE DATABASE IF NOT EXISTS mydb")
connection.commit()
finally:
connection.close()база данных на python (база данных на python)
Проблемы: неверные учётные данные, недоступность сервера, порт (по умолчанию 3306). Также необходимо предварительно создать пользователя с правами на создание баз данных.
Как создать базу данных PostgreSQL с помощью psycopg2?
PostgreSQL - мощная реляционная СУБД. Установка psycopg2 выполняется через pip install psycopg2-binary. Для создания новой базы данных необходимо подключиться к существующей (например, postgres).
import psycopg2
conn = psycopg2.connect(
dbname='postgres',
user='postgres',
password='your_password',
host='localhost'
)
conn.autocommit = True
cursor = conn.cursor()
cursor.execute("CREATE DATABASE testdb")
cursor.close()
conn.close()Python интерфейс базы данных (интерфейс базы данных в python)
Пояснение: свойство autocommit необходимо установить в True, так как создание базы данных не может быть выполнено внутри транзакции. Типичная ошибка - попытка создать базу данных без прав суперпользователя.
Как создать базу данных через ORM SQLAlchemy с декларативным подходом?
SQLAlchemy предоставляет универсальный способ работы с различными СУБД. Для создания базы данных достаточно создать движок и вызвать create_all.
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
email = Column(String(100), unique=True)
engine = create_engine('sqlite:///alchemy.db')
Base.metadata.create_all(engine)Проблемы: необходимо правильно настроить URL подключения (например, postgresql://user:pass@localhost/mydb). Возможны ошибки из-за отсутствия установленных драйверов для конкретной СУБД.
Расширенные примеры создания баз данных и таблиц
SQLite: таблица с внешним ключом и транзакциями
import sqlite3
conn = sqlite3.connect('shop.db')
cursor = conn.cursor()
# Включение поддержки внешних ключей
cursor.execute("PRAGMA foreign_keys = ON")
# Создание таблицы категорий
cursor.execute('''
CREATE TABLE IF NOT EXISTS categories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
)
''')
# Создание таблицы товаров с внешним ключом
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
price REAL,
category_id INTEGER,
FOREIGN KEY (category_id) REFERENCES categories(id)
)
''')
# Вставка данных в транзакции
try:
cursor.execute("INSERT INTO categories (name) VALUES ('Electronics')")
cursor.execute("INSERT INTO products (title, price, category_id) VALUES ('Laptop', 999.99, 1)")
conn.commit()
except sqlite3.Error as e:
conn.rollback()
print(f"Ошибка: {e}")
finally:
conn.close()Результат: создана база shop.db с двумя таблицами, связанными внешним ключом. При ошибке вставки транзакция откатывается.
MySQL: создание базы данных и пользователя с привилегиями
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='pass')
cursor = conn.cursor()
# Создание базы данных
cursor.execute("CREATE DATABASE IF NOT EXISTS myappdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
cursor.execute("CREATE USER IF NOT EXISTS 'appuser'@'localhost' IDENTIFIED BY 'secret'")
cursor.execute("GRANT ALL PRIVILEGES ON myappdb.* TO 'appuser'@'localhost'")
cursor.execute("FLUSH PRIVILEGES")
conn.commit()
cursor.close()
conn.close()Результат: создана база myappdb и пользователь appuser с полным доступом к ней.
PostgreSQL: создание таблицы с serial и индексом
import psycopg2
conn = psycopg2.connect(dbname='testdb', user='postgres', password='pass')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS articles (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
body TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
cursor.execute("CREATE INDEX IF NOT EXISTS idx_articles_created ON articles (created_at)")
conn.commit()
cursor.close()
conn.close()Результат: таблица articles с автоинкрементным ключом и индексом по дате создания.
SQLAlchemy: создание связанных таблиц с отношением
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, declarative_base
Base = declarative_base()
class Author(Base):
__tablename__ = 'authors'
id = Column(Integer, primary_key=True)
name = Column(String(100))
books = relationship("Book", back_populates="author")
class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
title = Column(String(200))
author_id = Column(Integer, ForeignKey('authors.id'))
author = relationship("Author", back_populates="books")
engine = create_engine('sqlite:///library.db')
Base.metadata.create_all(engine)Результат: база library.db с таблицами authors и books, связанными внешним ключом. SQLAlchemy автоматически создает необходимые SQL-команды.