python: SQLAlchemyでMySQLに接続する

プログラミング
スポンサーリンク




SQLAlchemyでMySQLに接続を行う際、少々てこずったのでやり方を備忘録としてまとめておきます。

スポンサーリンク

環境

・OS: macOS 10.15.4 Catalina

・python: 3.7.4

SQLAlchemyとは

簡潔に説明すると、

「プログラムでDBを操作できるようにするためのモジュール」

です。(この記事にたどり着くということは、その程度は理解されているでしょうが…)

詳しい説明は、他のサイト様ですでに書かれているのでそちらをご覧ください。

下準備

MySQLをインストールする

今回は、MySQLを使用します。まだインストールされていない方は、ターミナルで下記コマンドを叩いてインストールしてください。

$ brew install mysql

※Macでbrewコマンドを使えない場合、下記の記事を参考に「HomeBrew」をインストールしてください。

https://moimoiblog.com/tool-install/install-homebrew/

必要なモジュールをインストールする

2つのモジュールをインストールします。

① sqlalchemy

今回の主役です。

② PyMySQL

pythonからMySQLに接続するためのドライバです。

pipコマンドでインストールしましょう。

$ pip install sqlalchemy
$ pip install PyMySQL

接続していじってみる

今回は、 MySQLに接続し、「tasks」というテーブルを作り、レコードの追加、編集、削除を行っていきたいと思います。

※事前にMySQLを起動しておきましょう

全体のソースはこのようになります。

# ①必要なモジュールをインポート
import sqlalchemy.ext.declarative
import sqlalchemy.orm

# ②DBのオブジェクト(engine)を生成
# パスの構成
# mysql+[ドライバ名]://[ユーザー名]:[パスワード]@[IPアドレスorホスト名]/[DB名]
engine = sqlalchemy.create_engine("mysql+pymysql://root:@127.0.0.1/test_db")

# ③メタクラスの生成
Base = sqlalchemy.ext.declarative.declarative_base()


# ④メタクラスを継承し、テーブル情報を定義したクラスの生成
class Tasks(Base):
    __tablename__ = "tasks"
    id = sqlalchemy.Column(
        sqlalchemy.Integer, primary_key=True, autoincrement=True
    )

    name = sqlalchemy.Column(
        sqlalchemy.String(30)
    )


# ⑤定義したテーブル情報をDBと紐付ける(紐づくテーブルがない場合、生成される。)
Base.metadata.create_all(engine)


# ⑥DB内にアクセスするするためのオブジェクト(session)を生成
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()

# ⑦レコードを追加する
task1 = Tasks(name="SQLを理解する")
task2 = Tasks(name="Flaskを理解する")
task3 = Tasks(name="鬼滅の刃20巻を買いに行く")
session.add(task1)
session.add(task2)
session.add(task3)
session.commit()

# # ⑧レコードを修正する
task_a = session.query(Tasks).filter_by(id=1).first()
task_a.name = "SQLAlchemyを理解する"
session.add(task_a)


# ⑨レコードを削除する(本屋は圧倒的3密なので行ってはいけません)
task_b = session.query(Tasks).filter_by(id=3).first()
session.delete(task_b)

# ⑩全件数表示する
tasks = session.query(Tasks).all()
for task in tasks:
    print(str(task.id) + ":" +  task.name)

おすすめの書籍

SQLの第一人者であるジョー・セルコの名著『Joe Celkos SQL for Smarties, Fourth Edition: Advanced SQL Programming』の日本語版です。SQLプログラミングの基礎的な考え方から、テーブル操作、グループ化、集計関数、クエリの最適化など、ワンランク上を目指す上で欠かせない技術を学ぶ事ができます。

コメント

タイトルとURLをコピーしました