猫と遊ぶ 見習いプログラマーの備忘録

日々の学んだ事を随時更新。主にプログラム。その他いろいろ

Python的なコードでDBを操作する【SQLAlchemy】その2

前回に引き続き、SQLを直接記述せずにPython的なコードでDBを操作する方法をまとめてみる。 の第二弾💣

さて、前回までのおさらい!
SQLAlchemyインストール後の大まかな手順

1.モジュールを読み込ませる

2.DBの作成

3.モデルとテーブルを作成する

4.セッションの作成とCRUD処理

1と2は終わりましたとさ。
今回は、3.モデルとテーブルを作成するから作業していく

…ん? モデルとテーブルってなんなのさ(。´・ω・)?
と思ったそこのあなた。
私もはじめはわからなかったから説明するお。


まずテーブルとは……
より身近であろうPC用語で説明すると、Excelでいう、「シート」のこと。
シートは、Excelを開いたらはじめに出てくる入力するところ。
頭の中で一度想像してもらいたい。


そしてテーブルを説明するにあたっては他にも必然的に色んな用語が出てくる。
Excelのシートを想像したままでね!


たとえば「カラム」。
カラムとは、縦の列のこと。カラムごとに文字列と文字数、また数の値と桁数といった属性が決められていく。


次は「レコード」。
レコードとは、カラムに対して横の行のこと。まあレコード=データそのものといった感じだろうか。


さいごに「フィールド」。
Excelでいうとセルにあたるところ。
複数のレコードの、同じフィールドを集めたものがカラムになる。


図にしたほうがわかりやすいと思うので、描いてみた。参考までに。

f:id:msm20-chocolateee:20180711151242p:plain


じゃあモデルってなんなのさ、となる。

モデルとは、テーブルのこと。
テーブルの別名、というイメージで捉えておくのがよいかと。


そしてさいごに、4.セッションの作成とCRUD処理

CRUDってなんだよ、ってたぶんなると思うのでいったん説明に入らせていただく。
Google先生に聞けば一発解決だが、一応ここにも記しておく。
CRUD」は略語ですな。
身近でいえば、「KFC=ケンタッキー・フライド・チキン」てきな感じ。
( たまに食べたくなるよね🍗)

まあ身近な説明が妥当かは置いておいて、
CRUD」は以下をまとめた言い方である。
C」 → Create(登録)
R」 → Read(参照)
U」 → Update(更新)
D」 → Delete(削除)

上の処理たちをSQLAlchemyに書いていく。

すべてに共通するセッションの作成の記述は以下の通り。
Session = sessionmaker(bind=engine)
session = Session()

セッションの終了は、DBの処理が不要になった時点で記述する。
ちゃんと使ったら、最後は片づけるというイメージでクローズしましょう。
session.close()


いままで書いたのをまとめてSQLAlchemyでテーブルを書いていくと…

# モジュールの読み込み
from sqlalchemy import create_engine, Column, Integer, String, Boolean, TIMESTAMP
# DBに接続
engine = create_engine("mysql+pymysql://ユーザー名:パスワード@ホスト名/DB名")
from sqlalchemy .ext.declarative import declarative_base
from sqlalchemy .orm import sessionmaker
from sqlalchemy .orm.exc import NoResultFound

Base = declarative_base()
# テーブルの定義
class = テーブル名(Base):
# テーブル名の定義
    __tablename__ = "テーブル名"
# カラムの定義
    id = Column(Integer, primary_key = True)
    member_id = Column(Integer, nullable=False)
    name = Column(String(225), nullable = False)
    (以下カラムを追加していく)

    def  __repr__(self):
        return"<テーブル名(id='%s', member_id='%s', name='%s'.....)>"(self.id, self.member_id, self.name, ......)

# テーブルの生成
Base.metadata.create_all(engine)
# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()

session.add_all([
    テーブル名(member_id=1, name="まる子"),
        (以下データを追加していく)
])
session.commit()
# セッションの終了(DBの処理を終了する)
session.close()


で書いたら、指定した(今回はMySQLに生成されるよう記述)DBにテーブルが生成されるかと!

おつかれさま!