【PythonのORM】SQLAlchemyの基本的な使い方!

記事
IT・テクノロジー

# はじめに


SQLAlchemy とは、Python で使用できる ORM です。

Python コミュニティにおける最も使用されている ORM ライブラリの一つとなっているので、使用する機会も多いかと思います。

そんな SQLAlchemy の基本的な使い方をまとめてみました。

まずは、ここから基本的な操作を学び、応用的なものについては、随時調べながら実装すると良いかと思います。

# 使い方

## インストール

```
$ pip install sqlalchemy
```

## モデルの作成

以下のようにモデルを定義することで実行のタイミングでテーブルが生成されます。

```python
engine = sqlalchemy.create_engine('sqlite:///db.sqlite3', echo=True)
Base = declarative_base()


class Account(Base):
__tablename__ = 'account'

email = Column(String, primary_key=True)
password = Column(String)


Base.metadata.create_all(bind=engine)
```

## 基本操作

### Insert

データを追加する際は、まず、session を生成します。

その後、作成したモデルにデータを入力し、session に対して追加します。

追加したデータを commit でデータベースへ反映して、session を閉じます。

```python
db_session = sessionmaker(bind=engine)()
account = Account(email=email, password=password)
db_session.add(account)
db_session.commit()
db_session.close()
```

### Select

データを参照する際も、まず、session を生成します。

その後、query を使って、参照したいデータを指定します。

今回は、all で全てのデータを取っていますが、ここでフィルタリングを行ったり、ソートを行ったりすることができます。

最後に、session を閉じます。

```python
db_session = sessionmaker(bind=engine)()
db_session.query(Account).all()
db_session.close()
```

### Update

データを更新する際も、まず、session を生成します。

その後、更新したいデータをモデルから作成し、session に対して追加します。

追加したデータを commit でデータベースへ反映して、session を閉じます。

```python
db_session = sessionmaker(bind=engine)()
account = Account(email=email, password=password)
account = new_email
db_session.add(account)
db_session.commit()
db_session.close()
```

### Delete

データを削除する際も、まず、session を生成します。

その後、削除したいデータを query を使って、取得します。

delete を使って取得したデータを削除して、データベースに反映、session を閉じます。

```python
db_session = sessionmaker(bind=engine)()
account = db_session.query(Account).first()
db_session.delete(account)
db_session.commit()
db_session.close()
```

## 直接SQL文を実行

上記で示した指定の方法のほかにより細かな操作などしたいときは、直接 SQL 文を実行します。

以下のように engine.execute で実行できます。

select の場合の例を示していますが、渡す引数の文字列を変えてあげることで他の操作も可能です。

```python
from sqlalchemy import *

engine = create_engine('sqlite:///db.sqlite3')

result = engine.execute("select * from sample_table")

for row in result:
print(row)
```

# おわりに

いかがでしたか。

SQLAlchemy を使い始める第一歩になっていただけると幸いです。

フレームワークによっては、SQLAlchemy を使うことなくアプリケーションを作成することもできますが、

軽量なフレームワークを使う際は、SQLAlchemy を重宝するかと思います。

ぜひ、色々触ってみて、慣れていってください。

# 参考

ttps://www.sqlalchemy.org/

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す