SQLAlchemyで日付・日時を追加する方法

公開日:
目次

最近SQLAlchemyを使っていて、データベースに日付や日時を追加したいと思いました。

SQLAlchemyで日付や日時を追加する方法を調べてみたので、備忘録として残します。

SQLAlchemyで日付を追加する

SQLAlchemyで日付を追加する方法は非常にシンプルです。

以下に、具体的な例を使って説明します。

まず、SQLAlchemy ORMを使ってデータベーステーブルとそのモデルを定義します。

from sqlalchemy import create_engine, Column, Integer, String, Date, Sequence
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import date

# データベースエンジンの作成
engine = create_engine('sqlite:///:memory:')

# ベースの作成
Base = declarative_base()

# モデルの定義
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    birthdate = Column(Date)

# テーブルの作成
Base.metadata.create_all(engine)

# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()

# データの追加
new_user = User(name='John Doe', birthdate=date(1990, 5, 1))
session.add(new_user)
session.commit()

この例では以下の手順を踏みます。

  • create_engine関数でデータベースエンジンを作成。
  • Baseを宣言してベースクラスを作成。
  • データベースのテーブルスキーマを定義するUserクラスを宣言。
  • Base.metadata.create_all(engine)でテーブルを作成。
  • sessionmakerを使ってセッションを作成。
  • 新しいUserオブジェクトを作成して日付を含める。
  • セッションに新しいUserオブジェクトを追加してコミット。

この例で見られるように、日付を追加する際には標準のdatetime.dateオブジェクトを使用しています。

この方法を使えば、SQLAlchemyを使って簡単に日付データをデータベースに追加することができます。

SQLAlchemyで日時を追加する

時間も一緒に追加できます。その場合は、DateTime型を使います。以下に、時間を含むDateTimeを使った完全な例を示します。

from sqlalchemy import create_engine, Column, Integer, String, DateTime, Sequence
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime

# データベースエンジンの作成
engine = create_engine('sqlite:///:memory:')

# ベースの作成
Base = declarative_base()

# モデルの定義
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    created_at = Column(DateTime)

# テーブルの作成
Base.metadata.create_all(engine)

# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()

# データの追加
new_user = User(name='John Doe', created_at=datetime(2023, 10, 10, 15, 30, 45))
session.add(new_user)
session.commit()

この例では以下の手順を踏みます:

  • DateTime型のカラムを持つテーブルを定義 (created_at)。
  • datetimeモジュールを使って現在の日付と時刻を取得。
  • datetimeオブジェクトを使ってデータを追加。

このように、DateTime型とdatetimeモジュールを使うことで、日付と時間を一緒にデータベースに保存することができます。