PythonでSQLModelを使用しデータベースとテーブルを作成する

PythonでSQLModelを使用しデータベースとテーブルを作成してみます。

今回はSQLModelライブラリ・モジュールを使用します。SQLModelはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■SQLModelを使用しデータベースとテーブルを作成する

では、早速SQLModelを使用しデータベースとテーブルを作成するスクリプトを書いていきます。

■コード

from typing import Optional
from sqlalchemy.sql.expression import table
from sqlmodel import Field,SQLModel,create_engine
import sqlmodel

class sql_test(SQLModel,table=True):
    id: Optional[int] = Field(default=None,primary_key=True)
    name: str
    age:Optional[int] = None

sqlite_file_name = "database_test.db"
sqlite_url = f"sqlite:///C:\\pg\\sqiite3\\{sqlite_file_name}"  

engine = create_engine(sqlite_url,echo=True)

SQLModel.metadata.create_all(engine)

今回は、テーブル内のデータを表すクラスであるsql_testを作成します。括弧内で引数,パラメータとして「table=True」を渡し、SQLModelにテーブルを表すことを通知する。

クラスを作成後、クラス内にクラスのフィールドまたは列を定義します。なお、変数の名前が、テーブルの列の名前となります。今回はid,name,ageというテーブルの列を定義します。

定義後、SQLAlchemyエンジンを作成します。これはデータベースとの通信を処理するオブジェクトとなります。作成する場合は、create_engine()を用いて、括弧内に引数,パラメータとして使用するデータベースのURLを渡します。なお、今回はローカル上(C:\pg\sqiite3(フォルダパス))にSQLite3をインストールし、インストールした先のパスを指定しています。さらに、作成されるデータベースのファイルの名前を「database_test.db」としています。

最後にSQLModel.metadata.create_all()を用いて、括弧内に引数,パラメータとして作成したSQLAlchemyエンジンを渡します。これでデータベースとテーブルを作成することができます。

■実行・検証

このスクリプトを「sql_test_01.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

2021-12-23 13:50:47,888 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2021-12-23 13:50:47,888 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("sql_test")
2021-12-23 13:50:47,889 INFO sqlalchemy.engine.Engine [raw sql] ()
2021-12-23 13:50:47,892 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("sql_test")
2021-12-23 13:50:47,892 INFO sqlalchemy.engine.Engine [raw sql] ()
2021-12-23 13:50:47,893 INFO sqlalchemy.engine.Engine
CREATE TABLE sql_test (
id INTEGER,
name VARCHAR NOT NULL,
age INTEGER,
PRIMARY KEY (id)
)

2021-12-23 13:50:47,894 INFO sqlalchemy.engine.Engine [no key 0.00021s] ()
2021-12-23 13:50:47,899 INFO sqlalchemy.engine.Engine CREATE INDEX ix_sql_test_name ON sql_test (name)
2021-12-23 13:50:47,899 INFO sqlalchemy.engine.Engine [no key 0.00029s] ()
2021-12-23 13:50:47,908 INFO sqlalchemy.engine.Engine CREATE INDEX ix_sql_test_age ON sql_test (age)
2021-12-23 13:50:47,908 INFO sqlalchemy.engine.Engine [no key 0.00022s] ()
2021-12-23 13:50:47,913 INFO sqlalchemy.engine.Engine CREATE INDEX ix_sql_test_id ON sql_test (id)
2021-12-23 13:50:47,913 INFO sqlalchemy.engine.Engine [no key 0.00021s] ()
2021-12-23 13:50:47,920 INFO sqlalchemy.engine.Engine COMMIT

実行してみると、コマンドプロンプト上に上記のメッセージが出力されます。

出力後、ローカル上のフォルダを確認してみると「database_test.db」というファイルが作成されていました。

確認後、DB Browser for SQLiteを用いて、データベースファイルの中身を確認すると、定義した列が追加されていることが確認できました。

コメント

タイトルとURLをコピーしました