SQLAlchemyはPythonのSQLツールキットとORM(Object Relational Mapper)で、アプリケーション開発時にSQLの扱いに柔軟にそして強力な力を発揮してくれます。
本家サイトはこちら
自分のプライベートで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) )
この例では、id
と username
というカラム名は小文字のみで構成されているため、データベースでは大文字・小文字を区別せず扱われます。
大文字を含むカラム名:
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 オブジェクトを介してテーブルの主キーを指定することもできます。
最後に本家のリファレンスはこちら
まだまだありますが、日々付け足していきたいと思います。
いったんはここまで。