先日、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に保存されます。
以上です!