技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

SQLAlchemy のさわりだけ

SQLAlchemy?

Python の O/R マッパーです。
スクリプト言語だし、たかが数行試すだけならSQL 文書いても…とは思ったのだけど、せっかくなので

検証は

  • python : 3.6.8 (anaconda)
  • sqlite3 インストール済み
  • SQLAlchemy : 1.3

インストール

$ pip install SQLAlchemy

スキーマ作成

まずはインストールして

# Importing SQLAlchemy
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.exc import NoResultFound

どうもテーブルがなければ作るという挙動らしい。

# Create Schema.
Base = declarative_base()

class ClassRoomInfo(Base):
    __tablename__ = 'class_room_info'
    id = Column(Integer, primary_key = True, autoincrement = True)
    title = Column(String(512))
    limit = Column(Integer)
    joins = Column(Integer)

    def __repr__(self):
        return "<ClassRoomInfo(id='%s', title='%s', limit='%s', joins='%s')>" % (self.id, self.title, self.limit, self.joins)

Base.metadata.create_all(engine)

セッションを作って操作

コネクションの類は全部セッションがどうにかしてくれるご様子。

# Database session start.
Session = sessionmaker(bind=engine)
session = Session()

# ここに何かやりたいこと

# End of session.
session.close()

INSERT / SELECT

さすが Python 見たままやなー

# Isertion to database.
session.add(ClassRoomInfo(title='ひゃっはー', limit=20, joins=10))
# 中略(500 件くらい挿入)

# commit
session.commit()

# Selection
id50 = session.query(ClassRoomInfo).filter_by(id = 50).one()
print(f'ID 50 = {id50}')