SQLAlchemyモデルでのDatetime(6)定義方法

Web開発

先日、SQLAlchemyでモデルを定義していたのですが。。。

MySQLでいうところの、datetime(6):マイクロセカンド秒で保存するにはどうすればよいのか。

と、いったことを調べてましたので。

ここで共有しておきます!

SQLAlchemyのモデルでのDatetime(6)

結論から先に書きますが、以下のように記載します。

なんでもよいのですが、ここでは例としてUserモデルで考えてみます。

from sqlalchemy import Column
from sqlalchemy.dialects.mysql import DATETIME
from sqlalchemy.sql.functions import current_timestamp

from app.db.base_class import Base


class User(Base):
    ...

    created_at = Column(
        DATETIME(fsp=6),
        server_default=current_timestamp(6)
    )
    updated_at = Column(
        DATETIME(fsp=6),
        server_default=current_timestamp(6),
        onupdate=current_timestamp(6)
    )

重要な部分は、

from sqlalchemy.dialects.mysql import DATETIME

ここで、mysqlのDATETIMEをimportして使用することです。

このDATETIMEには、引数とてfsp(fractional seconds precision)が設定できます。

これに、6を渡してあげることでマイクロセカンド秒を表現できます。

以下のように、SQLAlchemyにもDatetimeがありますが、こちらはfsp=6が設定できないので使いません。

from sqlalchemy import DateTime

データ作成時と更新時にもマイクロセカンド秒で保存する

データ作成時と更新時の動作ですが、これも補足で書いておきます。

データ新規作成時の動作として、

server_default=current_timestamp(6)

としています。

current_timestamp(6)

と書いているように、ここでも引数として6(マイクロセカンド秒)を渡す必要があります。

更新時も同じです。

onupdate=current_timestamp(6)

で、データ更新時にもマイクロセカンド秒でDBに保存されます。

以上です!

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