【Python基礎の基礎】第7回目:データベースの操作とセキュリティ

はじめに

前回の記事では、Webアプリケーションフレームワークとテンプレートエンジンについて学びました。今回は、データベースの操作とセキュリティについて取り上げます。

1. データベースの操作

1.1 SQLiteの利用

SQLiteは、サーバーレスで軽量なデータベースエンジンであり、Python標準ライブラリとして組み込まれています。

# SQLiteデータベースへの接続とデータの操作
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,
    age INTEGER
)
''')

# データの挿入
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 25))
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Bob', 30))

# コミット
conn.commit()

# データの取得
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
    print(row)

# 接続をクローズ
conn.close()

1.2 ORMの利用

ORM(Object-Relational Mapping)を使うと、データベースのテーブルをPythonのオブジェクトとして操作することができます。

# SQLAlchemyのインストール
pip install SQLAlchemy
# SQLAlchemyを使ったデータベース操作
from sqlalchemy import create_engine, Column, Integer, String, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# データベースに接続
engine = create_engine('sqlite:///example.db', echo=True)
Base = declarative_base()

# テーブルの定義
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    age = Column(Integer)

# テーブルの作成
Base.metadata.create_all(engine)

# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()

# データの挿入
user1 = User(name='Alice', age=25)
user2 = User(name='Bob', age=30)
session.add(user1)
session.add(user2)
session.commit()

# データの取得
users = session.query(User).all()
for user in users:
    print(user.id, user.name, user.age)

# セッションをクローズ
session.close()

2. セキュリティ

2.1 サニタイズとエスケープ処理

Webアプリケーションにおいて、外部からの入力を適切に扱うことが重要です。サニタイズ(入力値の無害化)とエスケープ処理(HTMLエンティティへの変換)を行うことで、クロスサイトスクリプティング(XSS)などのセキュリティリスクを軽減できます。

2.2 パスワードのハッシュ化

ユーザーのパスワードなどの重要な情報は、データベースに保存する際にハッシュ化して保管します。ハッシュ化された情報は元の値を推測することが難しくなり、セキュリティを向上させます。

# passlibのインストール
pip install passlib
# passlibを使ったパスワードのハッシュ化
from passlib.hash import sha256_crypt

password = "mypassword"
hashed_password = sha256_crypt.hash(password)

print(hashed_password)

まとめ

データベースの操作とセキュリティについて学びました。データベースを利用することで、Webアプリケーションのデータ管理が容易になります。また、セキュリティ対策をしっかり行うことで、重要な情報の漏洩や不正アクセスを防ぐことができます。次回はAPIの作成とデータの公開について詳しく解説しますので、お楽しみに!

(Visited 82 times, 1 visits today)