SQLAlchemyのColumnクラスのちょっと確認してみた。

SQLAlchemyはPythonのSQLツールキットとORM(Object Relational Mapper)で、アプリケーション開発時にSQLの扱いに柔軟にそして強力な力を発揮してくれます。

本家サイトはこちら

あわせて読みたい
SQLAlchemy The Database Toolkit for Python

自分のプライベートでFastAPIを使ってWebアプリケーションの開発をしてて、何となくColumnクラスを利用しているのですが、少し使い慣れてきたこともあったので、改めて簡単にですが調べてみました。

FastAPIではPydanticというライブラリとごっちゃになることがあります。

SQLAlchemyはDBよりのライブラリで、DBアクセスをいかに効率よく開発できるようにするか。Pydanticはデータ構造を定義して、データ検証や型検証を行うもの。という違いを前提に理解を進めていく必要があります。

目次

Columnクラス

Columnクラスの概要

Columnクラスは、sqlalchemly.schema.Column で定義されていて、DBのカラムを表すクラスになります。

基本的な定義方法

from sqlalchemy import Cloumn, String
from app.db.base_class import Base

class TableName(Base):
    __tablename__ = 'table_name'

    column1 = Column("column1", String) #カラム名を指定している
    column2 = Column(String) #変数名がカラム名になる

tableの指定方法は以下のようにしている場合もあると思います。

from sqlalchemy import Column, Integer, String, Table, MetaData

metadata = MetaData()
user_table = Table('user', metadata,
    Column('id', Integer, primary_key=True)
)

このtable指定の部分はプロジェクトによって異なると思いますが、今回はColumnを対象にしますので、その前提で見て頂ければと思います。

Columnのプロパティ

name: カラム名を指定する

データベース内であらわされる列の名前で、引数の最初に指定するかキーワードで指定します。

大文字を含まないカラム名:
from sqlalchemy import Column, Integer, String, Table, MetaData

metadata = MetaData()
user_table = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('username', String)
)

この例では、idusername というカラム名は小文字のみで構成されているため、データベースでは大文字・小文字を区別せず扱われます。

大文字を含むカラム名:
user_table = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('UserName', String)  # 大文字を含む
)

こちらの UserName というカラム名は大文字を含むため、データベースではこの名前を正確に(大文字と小文字を区別して)扱い、多くのデータベースシステムでは引用符で囲まれます。

type: カラムの属性を指定する

カラムのタイプを指定します。

type 引数は 2 番目の位置引数であるか、キーワードで指定します。

Noneもしくは省略した場合、最初はデフォルトで特別なタイプのNullTypeになります。

# use a type with arguments
Column('data', String(50))

# use no arguments
Column('level', Integer)

autoincrement:

外部キーに依存しない、integerのprimary keyのauto increment属性を付けている場合に指定します。

primary_key

True の場合、この列を主キー列としてマークします。複数の列にこのフラグを設定して、複合主キーを指定できます。別の方法として、明示的な PrimaryKeyConstraint オブジェクトを介してテーブルの主キーを指定することもできます。

最後に本家のリファレンスはこちら

まだまだありますが、日々付け足していきたいと思います。

いったんはここまで。

目次