第1章 スキーマと型 スキーマと型
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
最初にしなければならないことは、テーブルが保持するデータ、そのデータの相互関係、そのデータに対する制約を定義することである。
基礎となるデータベースへのアクセスを提供するために、SQLAlchemy はデータベー スに存在すべきテーブルの表現を必要とする。 これには3つの方法がある:
-
ユーザ定義の
Tableオブジェクトを使用する。 -
テーブルを表す宣言的なクラスを使う
-
データベースから推測する
この 章では、SQLAlchemy Core で使われているアプローチである、これらのうち最初の ものを取り上げる。他の2つのオプションは、基本を理解した後の章で取り上げる。 Table オブジェクトは、型付けされたカラムとその属性のリストを持ち、共通のメタデータコン テナに関連づけられる。 SQLAlchemy でテーブルを構築するために利用可能な型を見て、スキーマ定義の探索を始めま しょう。
種類
SQLAlchemy の内部で使える型には4つのカテゴリがある:
-
ジェネリック
-
標準SQL
-
ベンダ特有
-
ユーザ定義
SQLAlchemyは、それぞれのバックエンドデータベースがサポートする実際の SQL の型から抽象化された、多数の汎用型を定義しています。 これらの型はすべてsqlalchemy.types モジュールで利用でき、便宜上sqlalchemy モジュールでも利用できる。では、これらの汎用型がどのように便利なのか考えてみよう。
ブール汎用型は通常BOOLEAN SQL 型を使い、Python 側では真か偽を扱う。しかし、BOOLEAN 型をサポートしていないバックエンドデータベースではSMALLINT も使う。SQLAlchemy のおかげで、この些細なことは隠蔽され、あなたが作るクエリや演算子は、使用され ているデータベースの型に関係なく、その型のフィールドに対して正しく動作することを信頼でき ます。Python のコードでは true か false かだけを扱えばよい。 このような振る舞いはジェネリック型を非常に強力なものにし、データベースの移行時や、データウェアハウスがあるデータベース型でトランザクションが別のデータベース型であるスプリットバックエンドシステムで役に立つ。PythonとSQLの両方におけるジェネリック型とそれに関連する型表現は、 表1-1で見ることができる。
| SQLAlchemy | Python | SQL |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access